2016-08-03 127 views
1

我有我需要聽的變化情況。我已綁定如下更改事件不觸發對JSONModel

var resModel = this.getModel("resources"); 
var resBinding = new Binding(resModel, "resources>/resources", resModel.getContext("/resources")); 
resBinding.attachChange(this._resourceChanged.bind(this)); 

當我將數據添加到模型如下模型稱爲資源,改變事件未被觸發

var resources = this.getModel("resources").getProperty("/resources"); 
resources.push({ 
       "res_num": 18, 
       "name": "New Added" 
       }); 
this.getModel("resources").setProperty("/resources", resources); 

但第一次當我添加到模型,可以將數據觸發

this.resourceModel.setData({ 
    'resources': resources 
}); 

回答

1

通過創建一個的BindingContext綁定就像你在這裏做

new Binding(resModel, "resources>/resources", resModel.getContext("/resources")); 

在我的理解,實際上創建了一個綁定到「資源> /資源//資源」。當使用的BindingContext綁定路徑應該是相對的(沒有前導「/」):

new Binding(resModel, "resources>resources", resModel.getContext("/resources")); 

但很可能你甚至不需要一個Context這裏,所以,這將是足夠的:

new Binding(resModel, "resources>resources"); 

請注意,sap.ui.model.Binding是抽象的,您可能需要使用sap.ui.model.PropertyBindingsap.ui.model.ListBinding,具體取決於被監視的屬性是普通屬性還是數組。

那麼爲什麼你的「變化」仍然最初觸發?我猜setData只會觸發所有更改監聽器,或者您的初始數據適合您意外綁定的結構。

我還沒有測試過上述內容。如果你提供一個JSBin,這將是一件容易的事情。

BR 克里斯

+0

它與JSBin工作,但不是在我的代碼https://jsbin.com/dotexiyaqa/edit?html,js,output – chiranjeevigk

+0

即使我使用使用setData insted的的的setProperty它不是觸發 – chiranjeevigk

+0

我在我的代碼中發現了問題..它是因爲這是2個不同的對象,因爲它沒有觸發。 – chiranjeevigk