在我的付款輸入控件上發現問題。有一個小的計算機文本字段失敗,但不會引發錯誤。剛剛停止了整個過程。在任何情況下,刪除computedText現在它的作品。將pItem返回到自定義控件的compositeData公式仍然會經常觸發,但我無法弄清楚如何停止它。它是所有常駐內存,因此可能不是一個重大的性能損失,但仍.....將定製屬性定義爲數據對象
這個問題是一個跟進我剛纔的問題,我會盡量細化問題 defining an object property in a compositeData on a custom control
重複控件綁定到由Java方法Payments.getAllItems(LinkKey)生成的arrayList,並且該方法正常工作。重複中的按鈕非常簡單,只需將viewScope.vsShowPayment = true和vsRIndex設置爲重複的索引值,以便知道我們正在使用的ArrayList中的哪個元素。然後刷新panelPaymentContainer,隱藏重複並呈現自定義控件ccTestPayment。 ccTestPayment具有稱爲pItem的java.lang.Object類型的與該代碼的自定義屬性:
<xc:ccTestPaymentInput rendered="#{javascript:(viewScope.vsShowPayment)}">
<xc:this.pItem><![CDATA[#{javascript:try{
var debug:Boolean = true;
if (debug) print("Open existing row = " + viewScope.vsRIndex)
rIndex = parseInt(viewScope.vsRIndex.toString());
if (debug) print("rIndex = " + rIndex);
pItem = Payments.getItem(rIndex);
return pItem;
}catch(e){
print("Failure in Custom Prop of add item " + e.toString());
return null;
}}]]></xc:this.pItem>
</xc:ccTestPaymentInput>
在類付款Payments.getItem(RINDEX)該方法然後從PaymentItems的ArrayList中返回PaymentItem對象和將其顯示在自定義控件中。自定義控件中的字段綁定到compositeData.pItem.getPaymentDate等等,此時一切都很酷。
我可以編輯自定義控件上的任何字段,並且一切正常。但是,當我按下「保存」按鈕時,其中的任何代碼都不會被執行。
try{
print("Start Payment save");
var debug:Boolean = true;
var pos:Integer = parseInt(viewScope.vsRIndex.toString());
if (debug) print("Working with pos = " + pos + " Call saveThisItem");
if (Payments.saveThisItem(compositeData.pItem , pos)){
if (debug) print("save Payments Worked ");
}else{
if (debug) print("save Payments FAILED ");
}
}catch(e){
print("payment save Error " + e.tostring);
}finally{
viewScope.vsExpPayDate = null;
viewScope.vsShowPayment = false;
viewScope.remove("vsRIndex");
viewScope.remove("vsGotItem")
}
沒有任何打印語句被觸發。我懷疑它有些事情要做pItem如何定義。自定義屬性背後的代碼被一遍又一遍地解僱,我想知道這是否會阻礙。
我想我仍然沒有看到整個圖片,但據我所知,你重複的按鈕執行一個容器的部分刷新,其中包含重複本身和CC,而CC又有一個自定義屬性,你嘗試從內部CC改變。如果是這樣,重複,CC和一切都重新渲染,每次你按鈕重置所有不存儲在某個安全的地方,包括重複的數據源,最有可能也是你的自定義屬性到他們的默認狀態和值。 –
我看到它可能導致一些額外的週期。我將分別進行刷新,這會減少重新計算的次數。將嘗試一個測試用例,看看我能減少多少次循環。我將在稍後發佈結果。 –