Javascript 如何在单独的视图模型之间发出敲除事件

Javascript 如何在单独的视图模型之间发出敲除事件,javascript,knockout.js,publish-subscribe,Javascript,Knockout.js,Publish Subscribe,我来自Angular(它有/有事件发射),我看到Knockout有“observables”/pubsub,尽管我不能完全理解使用单独视图模型的概念 下面是我尝试做的一个例子: 我在VM1中有一个对象数组,当一个元素被更新时,我想发出一个事件,说“这个对象已经改变了,请相应地更新!”并传递这个对象 我在网上找到了这个: 对于高级用户,如果您想注册自己的订阅以获得对可观察对象的更改的通知,您可以调用他们的订阅函数 但是,它没有提到谁将发布对“myViewModel”的任何更改。有人能澄清这一点吗

我来自Angular(它有/有事件发射),我看到Knockout有“observables”/pubsub,尽管我不能完全理解使用单独视图模型的概念

下面是我尝试做的一个例子:

我在VM1中有一个对象数组,当一个元素被更新时,我想发出一个事件,说“这个对象已经改变了,请相应地更新!”并传递这个对象

我在网上找到了这个:

对于高级用户,如果您想注册自己的订阅以获得对可观察对象的更改的通知,您可以调用他们的订阅函数

但是,它没有提到谁将发布对“myViewModel”的任何更改。有人能澄清这一点吗

在我的示例中,是否将可观察数组绑定到父对象(可能是ko)

编辑:

以下是一个例子:

用户至少有一个可以管理的用户


我有一个VM,负责显示单个用户的用户帐户设置页面。我有另一个VM,负责一次显示所有用户的用户。如果用户单击一行(用户的用户),则会出现一个面板来更改该行的数据。当一行被更改时,我想更新用户的主要用户列表。

我建议您将这些用户视为虚拟机,而不是虚拟机。您的应用程序应该有一个VM,它将使用这些组件。它还将拥有他们需要共享的任何数据项。在您的示例中,当前正在编辑的用户记录将由主VM拥有,并在初始化时传递给组件。“所有用户”组件可以设置当前记录的值,而“单用户”组件将显示并允许编辑这些值。“所有用户”组件可以订阅更新并做出相应的响应


在我看来,组件不关心谁在更改值,它们只想知道它们所依赖的值何时更改。我们的想法是拥有任何不同的、独立的数据项的一个副本,并在需要使用它的组件之间共享它。

您能提供一个最小但详细的行为示例吗?我不太明白为什么你需要知道是谁做的更改,或者为什么你有单独的视图模型。
myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});