有没有一种方法可以忽略可观察值的订户。我想更改一个observable的值,但不希望使用kickout.js对订户执行该值

最佳答案

通常这是不可能或不可取的,因为它可能使事情在依赖链中不同步。通常,使用节流扩展器是限制依赖项正在接收的通知数量的好方法。

但是,如果您确实想执行此操作,则一种选择是覆盖可观察对象上的notifySubscribers函数,并使其检查标志。

这是将此功能添加到可观察项的扩展:

ko.observable.fn.withPausing = function() {
    this.notifySubscribers = function() {
       if (!this.pauseNotifications) {
          ko.subscribable.fn.notifySubscribers.apply(this, arguments);
       }
    };

    this.sneakyUpdate = function(newValue) {
        this.pauseNotifications = true;
        this(newValue);
        this.pauseNotifications = false;
    };

    return this;
};

您可以将其添加到可观察对象中,例如:
this.name = ko.observable("Bob").withPausing();

然后,您可以通过执行以下操作来更新它而无需通知:
this.name.sneakyUpdate("Ted");

关于javascript - 可以观察到的变化,但不会在敲门通知中通知订户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17983118/

10-11 00:53