javascript - 在 knockout.js 中更改可观察但不通知订阅者

标签 javascript events knockout.js

有没有办法在可观察值发生变化时忽略订阅者。我想更改 observable 的值,但不使用 knockout.js 为订阅者执行它

最佳答案

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

但是,如果您真的想这样做,那么一种选择是覆盖 observable 上的 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 - 在 knockout.js 中更改可观察但不通知订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983118/

相关文章:

javascript - 实际反向冒泡到 DOM 中的叶子节点

events - Magento:如何让观察者在外部脚本中工作?

javascript - 如何从 View 模型自动更新模型属性?

zend-framework - Durandal:如何将配置数据从 HTML Host 传递到 ViewModel?

javascript - 如何在 javascript 中使用 Curl

javascript - 在 Typescript 中取消定义变量

javascript - JQuery 轮播是跳动的

javascript - mini-css-extract-plugin 产生的大型控制台输出

c# - 当委托(delegate)可以完成工作时,事件有什么用

javascript - Knockout.js 和复选框的双向绑定(bind)