所以我在我的应用程序中有一个页面,它使用了一个相当标准的嵌套模型实现,与标准Customer一致 - >订单 - > OrderLineItems类型。我的不同之处在于OrderLineItems的模型非常复杂。
在我的代码中,既有可观察数组也有可观察数据,为了正确更新我的视图,我发现我最终调用了“myObservable.valueHasMutated()”。
这是一种直觉,不得不手动执行此操作并不是应该如此 - 但我不知道在哪里可以了解可能需要更改的内容。所以有几个问题:
我在viewmodel中拥有的一个示例:
self.projectsVisible = ko.observable(false);
self.toggleProjectVisibility = function () {
self.projectsVisible(!self.projectsVisible());
self.projectsVisible.valueHasMutated();
};
这与一个按钮元素和一个DIV:
相关联<div data-bind="visible: projectsVisible">
<table>
<thead data-bind="template: {name: 'projectHeader'}"></thead>
<tbody data-bind="template: {name: 'project', foreach: projects}"></tbody>
</table>
</div>
<button type="button" data-bind="click: toggleProjectVisibility">
Toggle Projects On/Off
</button>
答案 0 :(得分:0)
我主要使用valueHasMutated
进行observableArray更改。
在您的示例中,self.projectsVisible(!self.projectsVisible());
已经通知订阅者,因为值始终会更改。因此,呼叫valueHasMutated
第二次通知订户进行相同的值更改。
你可以查看这个小提琴:http://jsfiddle.net/5RU7n/
如果您希望通过订阅者通知write
操作,即使值保持不变,也可以使用.extend({ notify: 'always' })
扩展程序(请参阅http://knockoutjs.com/documentation/observables.html)。
最后,我认为你可以尝试列举你调用valueHasMutated
的情况,你最终可能会找到多余的电话。