因此,在我的应用程序中有一个页面,该页面使用标准的嵌套模型实现,遵循标准的Customer-> Order-> OrderLineItems类型。对我来说,不同之处在于OrderLineItems的模型非常复杂。

在我的代码中,同时包含可观察数组和可观察数组,为了正确更新 View ,我发现我经常调用“myObservable.valueHasMutated()”。

直觉认为必须手动执行此操作不是应该的,但是我不确定在哪里可以知道可能需要更改的内容。有几个问题:

  • 这对于“深/大”模型是否正常?
  • 我可能会寻找明显的解决方法吗?
  • 在网络上是否有使用KO实现的此类复杂模型的示例?

  • 我的 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/

    10-12 07:06