是否有任何方法可以与样板文件中的模块进行交互通信



关于BoilerplateJs的例子,我们应该如何调整这些模块,以便在用户对一个模块进行任何更改后,其他相关模块都应该根据该更改进行更新。

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

谢谢!!

在BoilerplateJS中,每个模块都有自己的moduleContext对象。此模块上下文对象包含两个方法"listen"one_answers"notify"。有关更多详细信息,请查看"/src/core/context.js"中的上下文类。

需要"侦听"事件的组件应通过指定事件和回调处理程序的名称来注册该事件。引发事件的组件应该使用"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);
});

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

由于您已经在使用Knockout,您可能有兴趣首先尝试Ryan Niemeyer的Knockout邮箱插件。关于这个库的更多背景信息可以在这里找到,包括一个演示小提琴。如果需要,您可以随时稍后切换到Amplify。

相关内容

  • 没有找到相关文章

最新更新