2012-01-14 123 views
8

我在ko 2.0中使用無容器流量控制。當我更新我的observableArray中的項目時,它不會更新UI。我正在更新數組是這樣的:更新observableArray不更新UI

this.editFormHost = function (formHost) { 
    ... 
    formHost.HostName = newHostName; 
    this.formHosts[index] = formHost; 
} 

我想它不會更新,因爲索引更新陣列不KO叫什麼。從看the documentation看起來好像沒有方法可以更新一個對象,這個對象又會更新UI。或者在那裏?

+0

一個困難一點幫助沒有看到您的視圖模型,並理解你正在嘗試做的。作爲一個起點,你有沒有看到這個問題http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed和這個http://stackoverflow.com/questions/6425409/how-to-replace-a-given-index-element-in-knockoutjs? – saurus 2012-01-14 09:34:22

回答

15

這是一個小提琴,演示如何替換observableArray中的項目並使其更改通知UI。這裏

http://jsfiddle.net/johnpapa/ckMJE/

的關鍵是對observableArray替換功能。你也可以使用拼接。

...注意使用「替換」下面......

var ViewModel = function() { 
    this.self = this; 
    self.index = ko.observable(0); // default 
    self.newColor = ko.observable("purple"); // default 
    self.colors = ko.observableArray([{ 
     color: 'red'}, 
    { 
     color: 'blue'}, 
    { 
     color: 'yellow'}]); 
    self.replaceIt = function() { 
     self.colors.replace(self.colors()[self.index()], { 
      color: self.newColor() 
     }); 
    }; 
}; 
ko.applyBindings(new ViewModel()); 
+5

有人應該將替換方法添加到文檔中。非常好,謝謝! – 2012-01-14 15:48:23

+1

好點。我已將它添加到我的Knockout課程中,因爲我被問到了很多。 – 2012-01-14 15:54:33