隐藏 ViewPanel 中的列
Hide columns in a ViewPanel
我正在使用标准的 viewPanel 在 XPage 中显示视图数据。
应用使用的是Bootstrap3.2.0.
为了使呈现的 table 响应,我在 header 和列中添加了一些 bootstrap classes。
<xp:viewColumn columnName="StatusDescription"
id="viewColumn4" styleClass="hidden-xs hidden-sm">
<xp:viewColumnHeader value="Status"
id="viewColumnHeader4" styleClass="hidden-xs hidden-sm">
</xp:viewColumnHeader>
</xp:viewColumn>
当我调整浏览器 window 大小时,该列被正确隐藏,但 header 仍然存在。显然,styleClasses 并没有添加到第 th 个标签中,而是添加到第 th 个标签中。
<th role="columnheader" scope="col">
<div class="hidden-xs hidden-sm">
<span>
<span
id="view:_id1:_id2:facetMiddle:pnlViewPanl:viewColumn4:__internal_header_title_id"
class="hidden-xs hidden-sm">Status
</span>
</span>
</div>
</th>
结果是 table header 与显示的数据不同步。
有人知道我如何在 th 标签中获得样式 class 吗?
在我看来,视图 class 渲染器和/或视图列定义属性被搞乱了。
您会期望 <xp:viewColumnHeader styleClass="hidden-xs hidden-sm">
控制 th
风格 class 但正如您所见,它并没有。
为了实现您正在尝试做的事情,您可以尝试为 DataTableRendererEx
的 viewPanel 扩展渲染器 class。但是这种方法对你来说可能显得古怪,而且就个人而言,考虑到 IBM 有许多 class' 方法声明为私有,这将迫使你重写 class' 代码的大部分只是为了让你的手在你需要改变的地方。
从代码实际寻找 xp:viewColumn
是否存在 headerClass
属性 的意义上说,会有一些希望。但是,您瞧,属性 没有为组件显式定义,事实上,您在 Designer 的 viewColumn 的其他属性中看不到它。即使您要通过 xsp 源代码透视图显式编写它,Designer 也不会让您这样做,它也不会编译。您可以要求 IBM 修复 viewColumn 组件的 属性 定义文件,但坦率地说,我不知道这有多可行:XPages 年久失修。
所以我可以为您提供一个解决方法。有一种方法可以通过主题定义潜入属性(我写了一些关于它的文章 in this blog article)。因此,为了使用此解决方法,您必须使用主题。如果你已经有了它,你可以简单地添加这个规则:
<control>
<name>Column.View.Hidden</name>
<property>
<name>headerClass</name>
<value>hidden-xs hidden-sm</value>
</property>
<property>
<name>styleClass</name>
<value>hidden-xs hidden-sm</value>
</property>
</control>
控件名称随意。通常,我使用控件系列的原始名称 -Column.View
- 并附加变体名称 - 在本例中为 .Hidden
。如果它只是 Column.View
规则将适用于所有地方的所有 viewColumns。使用 Column.View.Hidden
我有一个规则,我可以在每个案例的基础上应用。
此时我只需要为我想要不同行为的列指定一个不同的主题 ID (themeId
属性)。
<xp:viewColumn columnName="columnName" id="viewColumn1" themeId="Column.View.Hidden">
<xp:viewColumnHeader value="columnHeaderName" id="viewColumnHeader1" />
</xp:viewColumn>
我正在使用标准的 viewPanel 在 XPage 中显示视图数据。 应用使用的是Bootstrap3.2.0.
为了使呈现的 table 响应,我在 header 和列中添加了一些 bootstrap classes。
<xp:viewColumn columnName="StatusDescription"
id="viewColumn4" styleClass="hidden-xs hidden-sm">
<xp:viewColumnHeader value="Status"
id="viewColumnHeader4" styleClass="hidden-xs hidden-sm">
</xp:viewColumnHeader>
</xp:viewColumn>
当我调整浏览器 window 大小时,该列被正确隐藏,但 header 仍然存在。显然,styleClasses 并没有添加到第 th 个标签中,而是添加到第 th 个标签中。
<th role="columnheader" scope="col">
<div class="hidden-xs hidden-sm">
<span>
<span
id="view:_id1:_id2:facetMiddle:pnlViewPanl:viewColumn4:__internal_header_title_id"
class="hidden-xs hidden-sm">Status
</span>
</span>
</div>
</th>
结果是 table header 与显示的数据不同步。
有人知道我如何在 th 标签中获得样式 class 吗?
在我看来,视图 class 渲染器和/或视图列定义属性被搞乱了。
您会期望 <xp:viewColumnHeader styleClass="hidden-xs hidden-sm">
控制 th
风格 class 但正如您所见,它并没有。
为了实现您正在尝试做的事情,您可以尝试为 DataTableRendererEx
的 viewPanel 扩展渲染器 class。但是这种方法对你来说可能显得古怪,而且就个人而言,考虑到 IBM 有许多 class' 方法声明为私有,这将迫使你重写 class' 代码的大部分只是为了让你的手在你需要改变的地方。
从代码实际寻找 xp:viewColumn
是否存在 headerClass
属性 的意义上说,会有一些希望。但是,您瞧,属性 没有为组件显式定义,事实上,您在 Designer 的 viewColumn 的其他属性中看不到它。即使您要通过 xsp 源代码透视图显式编写它,Designer 也不会让您这样做,它也不会编译。您可以要求 IBM 修复 viewColumn 组件的 属性 定义文件,但坦率地说,我不知道这有多可行:XPages 年久失修。
所以我可以为您提供一个解决方法。有一种方法可以通过主题定义潜入属性(我写了一些关于它的文章 in this blog article)。因此,为了使用此解决方法,您必须使用主题。如果你已经有了它,你可以简单地添加这个规则:
<control>
<name>Column.View.Hidden</name>
<property>
<name>headerClass</name>
<value>hidden-xs hidden-sm</value>
</property>
<property>
<name>styleClass</name>
<value>hidden-xs hidden-sm</value>
</property>
</control>
控件名称随意。通常,我使用控件系列的原始名称 -Column.View
- 并附加变体名称 - 在本例中为 .Hidden
。如果它只是 Column.View
规则将适用于所有地方的所有 viewColumns。使用 Column.View.Hidden
我有一个规则,我可以在每个案例的基础上应用。
此时我只需要为我想要不同行为的列指定一个不同的主题 ID (themeId
属性)。
<xp:viewColumn columnName="columnName" id="viewColumn1" themeId="Column.View.Hidden">
<xp:viewColumnHeader value="columnHeaderName" id="viewColumnHeader1" />
</xp:viewColumn>