2012-01-14 79 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