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

Knockout.js Knockout,为什么我们需要notifySubscribers的参数?,knockout.js,Knockout.js,有时我们需要使用notifySubscribers来强制执行一个observable的子循环,您可以将一个参数传递给notifySubscribers,但问题是传递的参数既不会更改observable的值,也不会传递给Subscriber,那个么为什么要使用它呢?我在一些淘汰文档中看到,传递了一个参数,例如,in。下面是一个示例,它验证了param未在任何地方使用这一事实。我是错过了什么,还是这个参数真的毫无意义 JSFIDLE中的代码 html notifySubscribers调用已为给定事

有时我们需要使用notifySubscribers来强制执行一个observable的子循环,您可以将一个参数传递给notifySubscribers,但问题是传递的参数既不会更改observable的值,也不会传递给Subscriber,那个么为什么要使用它呢?我在一些淘汰文档中看到,传递了一个参数,例如,in。下面是一个示例,它验证了param未在任何地方使用这一事实。我是错过了什么,还是这个参数真的毫无意义

JSFIDLE中的代码 html

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

subscribe方法的签名如下所示

订阅:函数回调、回调目标、事件

如果不使用最后一个参数,则默认情况下使用“更改”。但是你可以订阅beforeChange活动,甚至可以制作自己的活动!这就是notifySubscribers采用事件名称的原因

您说您试图在值未更改时强制执行订阅服务器。自定义事件可能比更改事件更好,因为即使值没有更改,您也在运行它。

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

subscribe方法的签名如下所示

订阅:函数回调、回调目标、事件

如果不使用最后一个参数,则默认情况下使用“更改”。但是你可以订阅beforeChange活动,甚至可以制作自己的活动!这就是notifySubscribers采用事件名称的原因


您说您试图在值未更改时强制执行订阅服务器。也许自定义事件比更改事件更好,因为即使值没有更改,您也在运行它。

我没有得到您的答案,它似乎与我无关@Tyrsius@David我添加了一些细节,有帮助吗?如果没有,请解释您的困惑我想我明白了,我的代码片段只包含计算的,因此传递的valueToNotify不会在任何地方使用,但是如果我调用viewModel.content.subscribeaCallback,valueToNotify是aCallback的第一个参数。我想我基本上被依赖和订阅之间的区别弄糊涂了,但这是一个不同的问题@提尔西乌斯:我不明白你的答案,这似乎与我无关@Tyrsius@David我添加了一些细节,有帮助吗?如果没有,请解释您的困惑我想我明白了,我的代码片段只包含计算的,因此传递的valueToNotify不会在任何地方使用,但是如果我调用viewModel.content.subscribeaCallback,valueToNotify是aCallback的第一个参数。我想我基本上被依赖和订阅之间的区别弄糊涂了,但这是一个不同的问题@TyrsiusI我很好奇,为什么在值没有改变的情况下要强制执行订阅服务器。如果值没有更改,他们会做什么?本文档中有一个示例,只需搜索notifySubscribers@tyrsius我很好奇为什么要在值没有更改时强制执行订阅服务器。如果值没有改变,他们会怎么做?本文档中有一个例子,只需搜索notifySubscribers@Tyrsius
<div data-bind="text: $data.content"></div>
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());