WebObjects/Web 應用/開發/WO 元件/繫結同步
當您建立 WOComponent 的子類時,預設配置是自動同步所有繫結。繫結同步是獲取和設定父級和子級 .wod 檔案繫結的過程,在請求-響應迴圈期間執行。雖然繫結同步非常方便,但唯一的缺點是您的繫結獲取和設定方法可能會在請求-響應迴圈期間被多次呼叫(最多六次)。因此,您應該注意獲取和設定方法內部潛在的效能問題。如果您希望避免潛在的效能問題,可以在您的元件中停用自動繫結同步,只需覆蓋 synchronizesVariablesWithBindings 方法以返回 false,如下例所示:
public boolean synchronizesVariablesWithBindings() {
return false;
}
如果 synchronizesVariablesWithBindings 為 false,您將使用 valueForBinding(bindingName) 和 setValueForBinding(value, bindingName) 方法手動獲取和設定繫結值。
由於 WOComponentContent 的工作方式,繫結通常與您的直覺相反(通常會發生您的包裝器將它的標題值推送到您的頁面,而不是相反)。使您的模板包裝器元件按預期的方式工作的一種方法是關閉自動繫結同步。
public boolean synchronizesVariablesWithBindings() {
return false;
}
public String pageTitle() {
return (String)valueForBinding("pageTitle");
}
檢視 WOComponent API 的 valueForBinding 和 setValueForBinding 方法。在您的子元件中,您可以定義 API(WOBuilder 中的拼圖圖示)。使用延遲初始化按需拉取繫結。子元件通常透過繫結從父級拉取並推送到父級。以下是一個簡單的手動拉取和推送 'customer' 繫結的示例。
public CTCustomer customer()
{
if (customer == null) {
customer = (CTCustomer)valueForBinding("customer");
}
return customer;
}
public void setCustomer(CTCustomer newCustomer)
{
customer = newCustomer;
setValueForBinding(customer,"customer");
}
還可以檢視 synchronizeVariablesWithBindings 以開啟手動繫結同步(建議按需同步,而不是在 R-R 迴圈中同步 6 次左右)。
如果您在繫結訪問器方法中使用延遲初始化,如上所述,您還應該使元件無狀態。如果您不使元件無狀態,您會發現您的元件在 WORepetition 中使用時可能會顯示不正確的值。這種情況發生在 WORepetition 的列表透過元件操作更改並且返回 null 時。現有的巢狀元件將被重用,並且將顯示原始列表中的值。
使元件無狀態並覆蓋它的 reset 方法,將所有例項變數設定為 null。這將使元件按預期的方式工作。