2012-04-10 72 views
0

有没有人注意到xpages中的datacontexts有问题。在某些情况下,具有多个自定义控件的单个xpage会在单个页面加载期间导致对datacontext进行12次评估?这是否也会与其他数据源一起发生?DataContext被执行多次

这是一个简单的例子,它被执行3次!

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 
    <xp:this.dataContexts> 
     <xp:dataContext var="doc1"> 
      <xp:this.value><![CDATA[#{javascript:var doc:NotesDocument = database.createDocument(); 
doc.replaceItemValue("Form", "frmContact"); 
doc.replaceItemValue("fldFirstName", "test"); 
print("got here"); 
return doc;}]]></xp:this.value> 
     </xp:dataContext> 
    </xp:this.dataContexts> 
    <xp:inputText id="inputText1" value="#{doc1.fldFirstName}"></xp:inputText> 
</xp:view> 

我不应该在我的应用程序中使用dataContexts吗?

回答

1

而且要小心,如果您使用的是部分刷新。让我们假设,你的datacontext在ID B中,并且你对ID A进行刷新.ID B中的datacontext也将被刷新。所有其他数据源也会发生这种情况。

我已经在这里描述的这种行为http://www-10.lotus.com/ldd/xpagesforum.nsf/topicThread.xsp?action=openDocument&documentId=56E9B8537DA50A90852579A6002EAC64#FA00DE3675A456C0852579AB005A1FF4

,也有关于PMR和可能的解决方法一些这方面的提示。

+0

感谢乌尔里希 - 我希望他们尽快解决这个问题,我在Xpages和自定义控件中使用数据上下文!解决方法并不适用于Domino对象,是吗? – pipalia 2012-04-11 15:21:15

1

就像页面上的其他控件一样,datacontext可以被多次评估。有关dataContexts的好处的更多信息,请参阅here。但在我看来,从您的代码示例中,使用xp:数据源可能会更快,但我不确定。

+0

非常感谢渡轮 - 这是一个非常简单的例子,我在其他地方以复杂的方式使用它,但事实是这个被执行不止一次是一个问题!我不知道如何检查xp:datasource加载的次数,但我认为它可能会做同样的事情! – pipalia 2012-04-10 23:02:44

1

与所有其他值绑定一样,如果将#更改为$,则可能会多次请求dataContext的value属性,但计算结果为将确定该值只会执行一次。

+0

我不确定这是否适用于此,除非我误解,否则您不能真正使用加载($)与多米诺骨牌对象计算吗? – pipalia 2012-04-11 15:19:32

+0

#与$只是确定属性值的分配方式。 #意味着一个值绑定对象被创建并与属性相关联,所以每次访问属性时,它都会要求绑定它当前评估的值。 $只意味着当对象被实例化时,它会对表达式进行一次评估,并将结果直接分配给属性的本地值。所以每次访问该属性时,它都会返回该值。 – 2012-04-11 17:04:47