因此,在我的应用程序中有一个页面,该页面使用标准的嵌套模型实现,遵循标准的Customer-> Order-> OrderLineItems类型。对我来说,不同之处在于OrderLineItems的模型非常复杂。
在我的代码中,同时包含可观察数组和可观察数组,为了正确更新 View ,我发现我经常调用“myObservable.valueHasMutated()”。
直觉认为必须手动执行此操作不是应该的,但是我不确定在哪里可以知道可能需要更改的内容。有几个问题:
我的 View 模型中的示例:
self.projectsVisible = ko.observable(false);
self.toggleProjectVisibility = function () {
self.projectsVisible(!self.projectsVisible());
self.projectsVisible.valueHasMutated();
};
这与一个按钮元素和一个DIV绑定(bind):
<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>
最佳答案
我主要使用valueHasMutated
进行observableArray更改。
在您的示例中,由于值始终更改,因此self.projectsVisible(!self.projectsVisible());
已通知订户。因此,调用valueHasMutated
再次通知订阅者相同的值更改。
您可以检查这个 fiddle :http://jsfiddle.net/5RU7n/
如果您希望即使在值保持不变的情况下也要通知观察者write
操作的订阅者,则可以使用.extend({ notify: 'always' })
扩展器(请参阅http://knockoutjs.com/documentation/observables.html)。
最后,我认为您可以尝试列举调用valueHasMutated
的情况,最终可能会自己发现多余的调用。
关于mvvm - Knockoutjs-调用valueHasMutated太频繁了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13316034/