如何在单独的视图模型之间的 Knockout 中发出事件

How to emit events in Knockout between separate view models

我来自 Angular(has/had 事件发出),我看到 Knockout 有 'observables'/pubsub,虽然我不能完全理解这个概念查看模型。

这是我正在尝试做的一个例子:

我在 VM1 中有一个对象数组,当一个元素更新时,我想 发出 一个事件说 "this object has changed, please update accordingly!" 并传递对象。

我在 KO documentation 上找到了这个:

For advanced users, if you want to register your own subscriptions to be notified of changes to observables, you can call their subscribe function.

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

但是它没有提到谁在发布对 "myViewModel" 的任何更改。谁能澄清一下?

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

编辑:

示例如下:

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

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

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

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