我得到一個對象從一個陣列中在我的模型(一個JSONmodel類型),其是model.getProperty()是否爲數組成員的對象返回活動對象?
{
"task": [
{
"dbid": 465,
"bk_cnt": 11,
}, {
"dbid": 472,
"bk_cnt": 16,
}
]
}
我結合這個模型來表並連接bk_cnt長達一個objectNumber中的細胞。到目前爲止沒有問題。
在代碼中,我想在按下按鈕時將第一個bk_cnt值的值從11更改爲20。我有以下事件:
var model = this.getView().getModel() // get the model
var tasks = model.getProperty("/task"); // get as a JS object
tasks[0].bk_cnt = 20 // update the model...will it update the view?
// model.refresh() // it will if this is uncommented.
問題:雖然它綁定到視圖,但bk_cnt的顯示值不會改變。如果我添加model.refresh()它。此代碼是從較大的部分提取的,其中一個較大的功能是通過列點擊進行排序。當我點擊一列以重新排序(不改變模型)時,值20出現。
什麼給?
冥想:我讀過model.getProprty()函數返回一個帶有活動引用的javascript對象,返回到該模型,並且該對象的值的更改將自動反映在視圖中以進行任何綁定控制。這個陳述落在數組屬性上嗎?
編輯:我周圍發現
model.setProperty("/task/0/bk_cnt", 20)
不需要model.refresh()來更新視圖中的問題仍然感覺。這並不令人驚訝,因爲這個命令直接通過模型行事。這讓我認爲getProperty()返回的'live'對象只有在它是一個像字符串或整數這樣的基本數據類型時纔有效,而不是JS對象。或者我錯過了什麼?
編輯2:@Ash在他的回答中指出,還有一種方法是從模型屬性訪問JS對象,設置需要在JS對象中更新的任何屬性,然後將其替換爲模型,例如
var tasks = model.getProperty("/task");
tasks[0].bk_cnt = 20
model.setProperty('/task', tasks)
完成第二次編輯,完成未來讀者的三種方法。
我如何將我的模型綁定到UI對象?在這種情況下,我使用了一個表格,並且在XML視圖中將'items'屬性設置爲'{path:'/ task'}'。還有另一種綁定方式嗎? –
除非沒有其他參數,否則您可以使用{/ task}並省略路徑。當然,你可以通過編程來綁定。 – matbtt
'model.refresh()'將刷新該模型的所有綁定。刷新綁定意味着使用模型中的Javascript對象的當前值更新控件。 'model.setProperty()'當然會改變模型中的Javascript對象,並且更新全部綁定到相同的路徑或子路徑。出於性能考慮,您必須考慮:如果只有一行數據發生更改,則不必刷新所有行。 – schnoedel