如何在单独的视图模型之间的 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,它将使用这些组件。它还将拥有他们需要共享的任何数据项。在您的示例中,当前正在编辑的用户记录将归主虚拟机所有,并在初始化时传递给组件。所有用户组件可以设置当前记录的值,单用户组件将显示并允许编辑这些值。所有用户组件可以订阅更新并做出相应响应。
在我看来,组件不关心谁 正在更改值,它们只想知道它们所依赖的值何时发生变化。这个想法是拥有任何不同的、独立的数据项的一个副本,并在需要使用它的组件之间共享它。
我来自 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,它将使用这些组件。它还将拥有他们需要共享的任何数据项。在您的示例中,当前正在编辑的用户记录将归主虚拟机所有,并在初始化时传递给组件。所有用户组件可以设置当前记录的值,单用户组件将显示并允许编辑这些值。所有用户组件可以订阅更新并做出相应响应。
在我看来,组件不关心谁 正在更改值,它们只想知道它们所依赖的值何时发生变化。这个想法是拥有任何不同的、独立的数据项的一个副本,并在需要使用它的组件之间共享它。