隐藏 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>