0

我在一页上有 2 个对象,我想在模型 1 发生一些更改后在模型 2 中触发一些事件。最好和正确的方法是什么?很高兴得到一些例子谢谢

4

2 回答 2

2

我使用我的约定库做到了这一点,它有一个用于查找构造函数名称的 util 函数。通过这种方式,它隐藏了所有魔术字符串,并且似乎是为用户强输入的。像这样使用它

订阅

MyApp.eventAggregator.subscribe(MyApp.DeleteCustomerMessage, this.customerDeleted.bind(this));

发布

MyApp.eventAggregator.publish(new MyApp.DeleteCustomerMessage(this));

MyApp.eventAggregator 是全局命名空间上的一个实例,因此消息将全局触发,您还可以实例化 MyApp.EventAggregator 的本地实例并将其用于视图模型的子集

可以在这里看到完整的工作示例 http://jsfiddle.net/wJtun/

编辑:您实际上也可以在没有我的库的情况下做到这一点 http://jsfiddle.net/wJtun/4/

注意:在上面的简单示例中,我们可能存在内存泄漏,如果您删除对订阅 ViewModel 的引用,它不会被垃圾收集,因为 EventAggregator 持有对它的引用。因此,例如,如果您在 SPA 场景中,您需要实现一个取消订阅的方法来删除引用(Javascript 无法使用弱引用)

于 2013-04-08T17:18:01.170 回答
2

您可以使用 AmplifyJS http://amplifyjs.com/api/pubsub/从另一个模型调用一个模型而不耦合它们。

于 2013-04-08T17:21:15.427 回答