关于BoilerplateJs的例子,我们应该如何调整这些模块,以便在用户对一个模块进行任何更改后,其他相关模块也应该随着该更改的完成而更新。
例如,如果有一个模块用于检索来自用户的输入,如姓名和销售额,另一个模块用于更新表或图形中检索到的数据,您能否举例说明,考虑到事件处理,这些内部连接是如何发生的?
谢谢!!
发布于 2012-09-13 12:45:02
在BoilerplateJS中,每个模块都有自己的moduleContext对象。此模块上下文对象包含两个方法'listen‘和'notify’。查看“/src/core/context.js”中的context类以了解更多详细信息。
需要“侦听”事件的组件应该通过指定事件和回调处理程序的名称来注册事件。引发事件的组件应该使用'notify‘方法让其他人知道发生了什么有趣的事情(可选地传递一个参数)。
从GitHub获取最新BoilerplateJS代码的更新。我刚刚提交了一些更改,使clickCounter成为一个复合组件,其中“clickme组件”引发事件,而“彩票组件”侦听事件以响应。
通知事件的代码:
moduleContext.notify('LOTTERY_ACTIVITY', this.numberOfClicks());监听事件的代码:
moduleContext.listen("LOTTERY_ACTIVITY", function(activityNumber) {
var randomNum = Math.floor(Math.random() * 3) + 1;
self.hasWon(randomNum === activityNumber);
});发布于 2012-09-13 06:48:09
我会考虑使用发布-订阅库,比如Amplify。使用这种技术,一个模块很容易充当事件的发布者,而其他模块则注册为订阅者,以高度解耦的方式侦听和响应这些事件。
由于您已经在使用Knockout,因此您可能有兴趣首先尝试Ryan Niemeyer的knockout-postbox插件。有关该库的更多背景信息,请参阅包括a demo fiddle在内的available here。如果需要,您可以随时切换到Amplify。
https://stackoverflow.com/questions/12396915
复制相似问题