可以(或应该)我将一个视图用于多个视图控件

时间:2014-08-15 16:37:27

标签: xpages

在传统的Notes编程中,最好的做法是将DbLookups和非隐藏视图等隐藏视图用于面向用户的视图。这样,您就不会收到用户向视图添加字段并中断查找的请求。保持演示分离形式逻辑。

我仍然在Xpages中遵循这一点。但我想知道我们是否可以(或应该)重用用于多个表示视图的数据源的隐藏视图。换句话说,视图和视图类型控件之间应该存在一对一的对应关系。拥有多对一关系是否存在局限性?

2 个答案:

答案 0 :(得分:3)

我认为在XPages世界中......假设它是100%的XPage应用程序,那么使用Views作为“演示文稿”的需求则要少得多。由于您可以更改视图中的内容并重复演示文稿的控件。

所以你最终可能会得到一个包含更多字段的视图然后你需要但是它会提供多个视图控件而你只是显示感兴趣的列等等。如果你要使用视图控件那么iffy部分就是用于排序列和所有这些。我实际上并没有太多使用视图控件。我发现它太有限了。我更喜欢重复控制。

所以回答你的问题我认为你绝对应该多次重复使用视图。从绩效的角度来看,我认为通常情况越少。

这些天我对整体观点的看法较少。我让Java Objects代表我的文档。所以我将使用一些视图来查找正确的文档,然后将它们推送到java对象中。然后在Java中,我将使用代码以不同的方式对事物进行排序,然后将其发送回重复控件。效果很好,这让我可以减少观看次数。但如果您使用3,000多个文档执行此操作...初始注入可能会有一些延迟,因此在某些情况下我可能必须回到实际触摸视图以获得更好的性能。

答案 1 :(得分:3)

在XPage应用程序中,不需要在View设计元素和View面板控件之间保持一对一的关系,而不应该在IMHO中保持一对一的关系。

考虑一个传统的Notes客户端应用程序,它只有一个Form设计元素和许多View设计元素。当您的主要/唯一演示工具是Form和View元素时,您倾向于获得大量视图以满足应用程序的各种演示要求。当然,每个添加的View都会生成一个索引,从而增加了应用程序的大小并降低了性能。

XPages的一个重要特性是数据和表示层的分离。这允许您在具有不同表示要求的多个XPage上重用相同的Domino View数据源 - 每个XPage显示不同的列集或使用不同的迭代器控件来显示视图数据(xp:viewPanel,xp:repeat,xp: dataTable,xe:dataView,xe:dynamicViewPanel,或xe:djxDataGrid)。

当我开发一个没有传统Notes客户端访问权限的新XPage应用程序时,我发现我倾向于创建更少,更平坦且更宽泛的视图(即更多列)。

我通过更多列获得更广泛的视图,因为它更有效地返回列值,然后返回基础文档中的字段值。所有迭代器控件都有一个var变量来处理Domino View数据源中的条目,甚至是通过其REST服务的xe:djxDataGrid。使用Domino View数据源时,我倾向于设置var =“viewEntry”以反映其NotesXspViewEntry类型。

所以,当我没有需要返回的字段值的列(比如查看列中的计算字段或迭代器控件的另一个方面)时,我必须从底层文档中获取它,如下所示:< / p>

<xp:text escape="true" id="computedField3">
    <xp:this.value><![CDATA[#{javascript:
       return viewEntry.getDocument().getItemValueString("City") + ", " +     viewEntry.getDocument().getItemValueString("State");
    }]]></xp:this.value>
</xp:text>

但是,如果我只将City和State列添加到Domino View数据源的View设计中,那么以下代码运行得更快:

<xp:text escape="true" id="computedField2">
        <xp:this.value><![CDATA[#{javascript:
            return viewEntry.getColumnValue("City") + ", " + viewEntry.getColumnValue("State");
        }]]></xp:this.value>
</xp:text>

更快的是EL等价物:

<xp:text escape="true" id="computedField1"
        value="#{viewEntry.City}, #{viewEntry.State}">
</xp:text>

由于我通过程序化名称而不是按位置在XPage代码中查看View列,因此我需要在我的View设计中添加新列似乎不会破坏任何内容(至少现在没有;)