更新observableArray不会更新UI

Rus*_*sby 8 javascript knockout.js

我在ko 2.0中使用无容器流量控制.当我更新observableArray中的项目时,它不会更新UI.我正在更新这样的数组:

this.editFormHost = function (formHost) {
    ...
    formHost.HostName = newHostName;
    this.formHosts[index] = formHost;
}
Run Code Online (Sandbox Code Playgroud)

我认为它不会更新,因为通过索引更新数组不会调用ko中的任何内容.从查看文档看起来没有更新对象的方法,而这些方法又会更新UI.还是有吗?

Joh*_*apa 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());
Run Code Online (Sandbox Code Playgroud)

  • 有人应该将替换方法添加到文档中.工作得很好,谢谢! (5认同)