knockout.js中的绑定更新

时间:2017-02-10 15:19:27

标签: javascript knockout.js data-binding

对于熟悉knockout.js的人来说,这可能是一个非常基本的问题,但这会让我遇到问题。

我的情况是我有一个模型,其中包含动态添加到视图中并在视图中显示的项目数组。

到目前为止没问题,我可以在模型中添加条目,并且视图会相应更新。

然而。数组中的每个项本身都有一个数组作为属性,这是一个对象数组,当我更新这些对象的属性时,视图不会更新。

很难证明这是一个简短的代码片段,所以我创建了一个JsFiddle来显示问题:

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

我尝试通过调用

生成属性
ko.observable()

而不是直接初始化它们,但无济于事。

单击“添加”按钮可将项目添加到模型本身的数组中。

任一更改...按钮都会更改内部数组中对象的属性。

1 个答案:

答案 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