当更换observableArray不清行为(observableArray unclear beh

2019-10-29 13:31发布

在我的ViewModel我有:

self.collaps = ko.observableArray([0,0,0,0,0,0,0]);

self.shouldShow = function(index) { return self.collaps()[index]; };

我的测试DIV:

<div data-bind="visible: shouldShow(5)">Shown!</div>

data-bind一个按钮click: show

self.show = function() {
    // 1. Index 5 gets true after 2 clicks!!? But UI never updates!
    self.collaps()[5] = true;

    // 2. This is push-ing in true starting at index 0
    self.collaps.replace(self.collaps()[5], true);

    // 3. If I combine the two, I get the behavior I want, I think :)
    self.collaps()[5] = true;
    self.collaps.replace(self.collaps()[5], true);

};

这是怎么回事吗? 什么是这样做的正确方法吗?

----> 的jsfiddle为您的乐趣! <----

Answer 1:

下面是从报价ko文件:

关键点:一个observableArray轨道哪些对象是在阵列中,而不是那些对象的状态

简单地把对象装进observableArray不作眼前一亮观察到该对象的属性。 当然,你可以让这些属性可观察到的,如果你愿意的话,但是这是一个独立的选择。 一个observableArray只跟踪哪些对象它保持,并且当对象被添加或删除通知侦听。

所以,当你改变数组元素的值knockout不通知。 您可以使用valueHasMutated功能手动通知用户:

self.show1 = function() {
    self.test(self.test()+1);

    self.collaps()[5] = true;
    self.collaps.valueHasMutated();
};


文章来源: observableArray unclear behavior when replacing
标签: knockout.js