dataContext可以返回NotesViewEntry集合吗?

时间:2014-09-16 21:02:34

标签: xpages xpages-ssjs

这是我在In a SSJS button I have got a NotesViewEntryCollection

上一篇文章的后续内容

所以我有一个Go按钮,它从一个字段中获取一个值并返回一个viewEntryCollection,所以我看到我如何在dataContext中计算它。我把它添加到了我的页面:

    <xp:this.dataContexts>
        <xp:dataContext var="veCol">
            <xp:this.value><![CDATA[#{javascript:var vw:NotesView = database.getView("vwCompanies");
var thisVeCol:NotesViewEntryCollection = vw.getAllEntriesByKey(viewScope.get("vsCompany"),false);
if (thisVeCol.getCount() == 0){
    //get back to the page don't pass veCol probably need to do more than this
    return "";
}else{
    //the repeat is not rendered if false Go button does a partial refreash on the panelRepeat
    //think it will need to a partial refresh on this dataContext as well
    viewScope.put("vsDisplayRepeat", true);
    return thisVeCol;
}}]]></xp:this.value>
        </xp:dataContext>
    </xp:this.dataContexts>

然后我的重复只会绑定到veCol并且应该给我我想要的东西。我想我必须检查是否在此代码中设置了vsCompany。

现在我已经阅读了矛盾的陈述,因为序列化可以以这种方式使用dataContext来包含Notes对象。

这个概念会在实践中发挥作用吗?我的代码是否符合我的想法?

由于

1 个答案:

答案 0 :(得分:3)

是和否。除了代码中的错误(你在早期的“getCount”之后缺少“()” - 我相信当前的表单将总是评估为false,因为它正在比较一个类(我)到0,但谁知道SSJS?),该代码可能会按照您的预期进行。

然而,它可能会比你期望的更频繁地做到这一点,这对你的页面速度有害。 #{} - 在页面评估期间多次评估绑定的dataContexts。 Sven Hasselbach非常详细地介绍了这一点(http://hasselba.ch/blog/?p=1112),其结果是,使用它一次的页面的正常加载将计算三次,刷新可能是十一次。

$ {} - 绑定的dataContexts没有这个问题,因为每个XPage只评估一次,但它们确实会遇到你描述的序列化问题。可能最好的选择是切换到使用带有<xp:dominoView/>的{​​{1}}数据源,或者,如果由于某种原因不切实际,请将视图条目数据预先读入categoryFilter(使用OpenNTF API会更容易)。如果您执行后者,请注意List<Map<String, Object>> s。