对于熟悉knockout.js的人来说,这可能是一个非常基本的问题,但这会让我遇到问题。
我的情况是我有一个模型,其中包含动态添加到视图中并在视图中显示的项目数组。
到目前为止没问题,我可以在模型中添加条目,并且视图会相应更新。
然而。数组中的每个项本身都有一个数组作为属性,这是一个对象数组,当我更新这些对象的属性时,视图不会更新。
很难证明这是一个简短的代码片段,所以我创建了一个JsFiddle来显示问题:
https://jsfiddle.net/mikewardle/t0nvwqvL/1/
我尝试通过调用
生成属性ko.observable()
而不是直接初始化它们,但无济于事。
单击“添加”按钮可将项目添加到模型本身的数组中。
任一更改...按钮都会更改内部数组中对象的属性。
答案 0 :(得分:2)
由于Ko2r声明您的属性未被声明为可观察对象,因此淘汰不会注意到更新。
要修复changecolors()
功能,您只需更改linePusher功能即可将颜色创建为可观察的颜色:
var linePusher = function (color, name) {
self.lines.push({ color: ko.observable(color), name: name, current:0 });
};
然后将color属性的用法更新为box / unbox observable,而不是用标准赋值运算符替换它的值,“=”
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()
函数应该做什么,所以我不能告诉你如何解决它,但希望修复{ {1}}让你走上正轨。
您可能需要阅读working with observables