2017-02-10 80 views
0

對於熟悉knockout.js的人來說,這可能是一個非常基本的問題,但是這會導致我出現問題。knockout.js中的綁定更新

我有一種情況,我有一個模型,其中包含動態添加並顯示在視圖中的項目數組。

到目前爲止沒有問題,我可以將條目添加到模型中並適當更新視圖。

但是,數組中的每個項目本身都有一個數組作爲屬性,這是一個對象數組,當我更新這些對象的屬性時,視圖不會更新。

這是很難證明這是一個簡短的代碼片段,所以我創建了一個的jsfiddle,藉以說明問題:

https://jsfiddle.net/mikewardle/t0nvwqvL/1/

我嘗試做所產生的性能通過調用

ko.observable() 

而不是直接初始化它們,但無濟於事。

單擊添加按鈕將項目添加到模型本身的數組。

這兩個按鈕之一會改變內部數組中的對象的屬性。

+1

讀了,我可以看到你的顏色屬性不被KO的注視下,也許你應該把它聲明爲可觀察...... – Ko2r

回答

2

由於Ko2r聲明你的屬性沒有被聲明爲observables,因此更新不會被knockout注意到。

要解決您的changecolors()功能,你只需要改變你的linePusher函數來創建顏色作爲觀察到:

var linePusher = function (color, name) { 
    self.lines.push({ color: ko.observable(color), name: name, current:0 }); 
}; 

,然後更新顏色屬性的用法框/拆箱可觀察到的,而不是取代它與標準的賦值運算符值,「=」

for (i=0;i<counters.length;i++){   
    var lines = counters[i].lines(); 
    for (j=0;j<lines.length;j++){ 
    //lines[j].color = color; 
    lines[j].color(color); //sets the existing observable to the new value 
    } 
} 

不幸的是,我似乎不能讓你的代碼足夠的意義搞清楚什麼increment()功能是應該做的事情,所以我不能告訴你何W修復它,但希望修復到changecolors()把你放在正確的軌道上。

你可能想在working with observables

+0

感謝你,因爲有固定的這一切對我來說。我嘗試使用'ko.observable()'butr沒有意識到你需要傳遞一個值來初始化變量'ko.observable(value)' – MikeW