在 xe:dataView 中,如何对摘要分面进行编码以显示/隐藏详细分面



默认情况下,摘要列添加一个链接,用于打开 dataView 的 pageName 属性中指定的基础文档。 我有一个用例,我想将应用程序保留在 dataView 中,而不是打开任何"documentXPage"。

我知道这可以重复完成,但是dataView的其他部分/功能非常适合应用程序,因此理想情况下,我只是希望覆盖summaryColumn的默认行为。

为了覆盖链接行为,我将摘要列添加为分面,而不是属性,如下所示:

<xp:this.facets>
    <xp:panel xp:key="summary" id="summaryPanel">
        <xp:text escape="false" id="computedField3">
            <xp:this.value><![CDATA[#{javascript:
var custName = viewEntry.getColumnValue("Customer");
return "<h4>"+custName+"</h4>"}]]>
                   </xp:this.value>
        </xp:text>
    </xp:panel>
    <xp:panel xp:key="detail" id="detailsPanel" readonly="true">
            <xp:text escape="true" id="computedField1">
            <xp:this.value><![CDATA[{javascript:
viewEntry.getDocument().getItemValueString("Address") + ",      " +
viewEntry.getDocument().getItemValueString("City") + ", " +
viewEntry.getDocument().getItemValueString("State")}]]>
                    </xp:this.value>
            </xp:text>
   </xp:panel>
<xp:this.facets>

如何对摘要分面进行编码,以便在单击时显示/隐藏详细信息分面?

这取决于

客户端上的设置详细信息。

如果设置为 true,您应该能够使用 CSJS 将显示设置为"block"或"none",并且您应该能够使用 getComponent("dataView1").getRowIndex() 计算出需要更改的元素的 ID(假设您的 dataView 具有 ID dataView1)

这也是在 detailsOnClient 为假时执行相同操作的关键。以下代码将起作用。

var idex=getComponent("dataView1").getRowIndex();
getComponent("dataView1").toggleDetailVisible(@Text(idex+1));

您基本上是在当前 rowIndex(从 0 开始)上获得一个句柄,添加 1 以使行切换并将其转换为文本。DataView 控件有一个方法切换 DetailVisible(String),用于执行切换。

正如 Domino 9 中的@Mikael所述,切换 DetailVisible 函数似乎不起作用。根据布拉德·巴拉塞蒂斯(Brad Balassaitis)的建议,我通过获取扭曲对象的手柄并单击它来使其工作。

var myid = "#{id:link3}";
var parts = myid.split(":");
var outparts = [];
for(var idx=0; idx<parts.length-1; idx++){
    outparts[idx] = parts[idx];
}
outparts[outparts.length-1] += "_shimg";
var bid = outparts.join(":");
var btn = document.getElementById(bid);
btn.click();

最新更新