2013-07-25 51 views
1

我在自定義控件上有一個inputText組件,我試圖將該值綁定到viewScope,但viewScope名稱是使用compositeData值和字符串計算的。將inputText值綁定到具有計算名稱的viewScope

如果我硬編碼值結合它的工作原理,例如: 值= 「$ {viewScope [ 'BillingDate_From']}」

的viewScope名稱使用下面的JavaScript代碼來計算: compositeData.dateRangeFilter [ 0] .from_fieldname +'_From'

我已經嘗試了很多方法來實現這一目標,但沒有成功,有時候它會出錯,通常是出乎意料的字符錯誤,但大多數時候inputText框是空的。

的代碼,我最近嘗試: 值= 「$ {viewScope [#{的javascript:compositeData.dateRangeFilter [0] .from_fieldname + '_From'}]}」

回答

1

我已經發現,我不知道這個原因,如果在評估中有任何字符串連接,試圖動態綁定不起作用。我解決這個問題的方法是創建一個接受bindingValue和dataSource作爲參數的自定義控件,然後傳入我想要使用的文檔和字段名稱。無論出於何種原因,如果代碼使用複合數據,它仍然允許在頁面加載時進行編輯。使用控制

  <xp:inputText id="inputText1"> 
       <xp:this.value><![CDATA[${javascript:"#{"+compositeData.scopeName+"}";}]]></xp:this.value> 
      </xp:inputText> 
      <xp:text escape="true" id="computedField1"> 
    <xp:this.value><![CDATA[${javascript:"#{"+compositeData.scopeName+"}";}]]></xp:this.value> 
</xp:text> 

XPage上:

+0

非常感謝亞倫,我以爲這是要麼我沒有考慮所有的選擇或限制。我現在將viewScope名稱添加爲必需的屬性定義,但不是最好的,但絕對可行 –

1

嗨嘗試這種打造你所需要的:

控制

<xc:cc id="xx"> 
    <xc:this.scopeName><![CDATA[#{javascript:return "viewScope." + " calculatedScopeVarName";}]]></xc:this.scopeName> 
    </xc:cc> 
    <xp:button value="Beschriftung" id="button1"> 
     <xp:eventHandler event="onclick" submit="true" 
      refreshMode="partial" refreshId="xx"> 
      <xp:this.action><![CDATA[#{javascript://}]]></xp:this.action> 
     </xp:eventHandler> 
</xp:button> 

而不是 「viewScope」 你不能添加會話或另一個範圍,而不是calculateScopeVar,你可以輸入你的var的名字。但是這有一個限制,只有當calculateScopeVar可以通過組件onLoad訪問時纔有效。例如,如果您在重複控件中使用此控件並嘗試將重複數組用作computedScopeVar,則它將不起作用。

+0

邁克爾,你確定嗎?我有這種類型的實現在使用視圖作爲數據源的重複控制中工作,從視圖條目獲取字段的傳入值的值。 –

相關問題