Mvvm Knockoutjs——调用ValueHas变异太频繁了?
因此,我的应用程序中有一个页面,它使用了相当标准的嵌套模型实现,类似于标准的Customer->Order->OrderLineItems类型。对我来说,不同之处在于OrderLineItems的模型非常复杂 在我的代码中,无论是可观测数组还是可观测数组,为了正确更新视图,我发现我调用了很多“myObservable.valueHasMutated()” 有种直觉认为,必须手动完成这项工作并不像它应该做的那样——但我不确定该去哪里寻找可能需要更改的内容。所以有几个问题:Mvvm Knockoutjs——调用ValueHas变异太频繁了?,mvvm,knockout.js,Mvvm,Knockout.js,因此,我的应用程序中有一个页面,它使用了相当标准的嵌套模型实现,类似于标准的Customer->Order->OrderLineItems类型。对我来说,不同之处在于OrderLineItems的模型非常复杂 在我的代码中,无论是可观测数组还是可观测数组,为了正确更新视图,我发现我调用了很多“myObservable.valueHasMutated()” 有种直觉认为,必须手动完成这项工作并不像它应该做的那样——但我不确定该去哪里寻找可能需要更改的内容。所以有几个问题: 这对于“深/大”型号来说
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>
打开/关闭项目
我使用valuehassmutated
主要用于观察到的变化
在您的示例中,self.projectsVisible(!self.projectsVisible())代码>已通知订阅者,因为值总是更改。因此,调用valuehassmutated
会再次通知订阅者相同的值更改
您可以检查此小提琴:
如果要通知订阅者对可观察对象执行写入操作,即使值保持不变,也可以使用.extend({notify:'always'})
扩展程序(请参阅)
最后,我认为您可以尝试列举调用valuehassmutated
的情况,您最终可能会发现冗余调用。也许您可以从JSFIDLE中得到一些说明问题的信息?很少有情况下您需要自己调用valuehassmutated
。通常,当您直接修改observable/observableArray持有的对象/数组并希望触发更新时,或者当您创建订阅并希望立即触发它时,将使用此选项。在切换布尔值的情况下,您不应该需要它。我认为JSFIDLE可以帮助我们缩小范围。我也有类似的问题。JSFIDLE here:在这个问题中,有人建议我调用valueHasMutated()以使我的更改生效。