淘汰赛,为什么我们需要notifySubscribers的参数?

时间:2016-07-12 20:20:48

标签: knockout.js

有时候我们需要使用notifySubscribers来强制执行一个observable的子类,你可以将一个param传递给notifySubscribers,但问题是传递的param既不会改变observable的值,也不会传递给它。 subriber,那么为什么使用?我在一些Knockout文档中看到,例如,在this one中传递了一个参数。这是一个jsfiddle code snippet,它验证了param不在任何地方使用的事实。我错过了什么,或者这个参数确实毫无意义?

jsfiddle中的代码 HTML

<div data-bind="text: $data.content"></div>

的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());

1 个答案:

答案 0 :(得分:4)

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

subscribe方法(见here)的签名是

subscribe: function (callback, callbackTarget, event)

如果您不使用最后一个参数,则默认使用change。但您可以订阅beforeChange活动,甚至制作自己的活动!这就是notifySubscribers获取活动名称的原因。

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