2012-04-10 44 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