6

关于BoilerplateJs示例,我们应该如何调整这些模块以便以这样的方式相互通信,一旦用户对一个模块进行了任何更改,其他相关模块应该随着更改完成而更新。

例如,如果有一个模块可以从用户那里检索输入作为名称和销售额,而另一个模块可以更新表格或图表中检索到的数据,你能用一些例子来解释一下,考虑到事件处理,这些互连是如何发生的?

谢谢!!

4

2 回答 2

3

在 BoilerplateJS 中,每个模块都有自己的 moduleContext 对象。这个模块上下文对象包含两个方法“listen”和“notify”。查看 '/src/core/context.js' 中的上下文类以获取更多详细信息。

需要“监听”事件的组件应通过指定事件名称和回调处理程序来注册事件。引发事件的组件应该使用“通知”方法让其他人知道发生了一些有趣的事情(可选地传递一个参数)。

从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-13T04:45:01.880 回答
0

我会考虑使用 Publish-Subscribe 库,例如Amplify。使用这种技术,一个模块很容易充当事件的发布者,而其他模块则可以注册为订阅者,以高度解耦的方式监听和响应这些事件。

由于您已经在使用 Knockout,您可能有兴趣首先尝试 Ryan Niemeyer 的knockout-postbox插件。此处提供了有关此库的更多背景信息,包括演示小提琴。如果需要,您可以随时切换到 Amplify。

于 2012-09-12T22:48:09.257 回答