小部件之间的通信
有许多组件之间的通信方式
- 从父级到它的子级
一个简单的例子。父不见可以简单的调用子部件方法:this.someWidget.update(someInfo);
- 从一个小部件到它的父/某个祖先
在这种情况下,小部件的工作只是通知其环境发生了什么事情。由于我们不希望小部件具有对其父部件的引用(这将使小部件与其父部件的实现相结合),因此继续操作的最佳方法通常是使用触发器trigger_up方法触发一个事件,该事件将冒泡到组件树中:this.trigger_up('open_record', { record: record, id: id});
此事件将在小部件上触发,然后将冒泡并最终被某些上游小部件捕获:
1 | var SomeAncestor = Widget.extend({ |
- 交叉组件
通过总线可以实现跨组件通信。这不是首选的通信形式,因为它有使代码难以维护的缺点。但是,它具有分离组件的优势。在这种情况下,这只是通过触发和监听总线上的事件来完成的。例如:
1 | // in WidgetA |
在本例中,我们使用web.core导出的总线,但这不是必需的。可以为特定目的创建总线。