Knockout,为什么我们需要notifySubscribers的参数?

Yan*_*eng 1 knockout.js

有时我们需要使用notifySubscribers来强制执行一个observable的订阅者,你可以传递一个param给notifySubscribers,但问题是传递的param既不会改变observable的值,也不会传递给订阅者,那么为什么使用它?我在一些 Knockout 文档中看到,传递了一个参数,例如,在这个. 这是一个jsfiddle 代码片段,它验证了 param 未在任何地方使用的事实。我错过了什么,还是参数确实毫无意义?

jsfiddle html中的代码

<div data-bind="text: $data.content"></div>
Run Code Online (Sandbox Code Playgroud)

javascript

var viewModel = {
    content: ko.observable('original')
};

var cpted = ko.computed(function(){
  alert(viewModel.content());
    return viewModel.content();
});

ko.applyBindings(viewModel);

viewModel.content.notifySubscribers('new value');

alert(viewModel.content());
Run Code Online (Sandbox Code Playgroud)

Kye*_*ica 6

notifySubscribers调用为给定事件注册的所有订阅。默认情况下对change事件进行订阅,但订阅系统是为支持多个事件而构建的。在内部,Knockout 还会为 引发一个事件beforeChange,您可以在此处的源代码中看到

subscribe方法的签名(见这里)是

subscribe: function (callback, callbackTarget, event)

如果省略最后一个参数,change则默认使用。但是您可以订阅该beforeChange事件,甚至可以创建自己的事件!这就是为什么notifySubscribers需要一个事件名称。

你说你试图在值没有改变时“强制执行订阅者”。也许自定义事件比事件更好change,因为即使值没有改变,您也在运行它。