我对如何处理Backbone中的视图之间的事件感到有点困惑。现在我在网站上同时呈现了两个部分视图。现在我希望其中一个视图调度另一个视图可以侦听的事件。我该怎么做?
在调度我运行的事件的视图中:
this.trigger("myEvent")
在视听中我跑:
this.bind('myEvent', this.myFunc);
但似乎没有任何事情发生。
答案 0 :(得分:25)
如果您使用以下内容触发v1
上的活动
this.trigger('myEvent'); // this is v1
然后你必须听取v1
的事件:
v1.on('myEvent', this.myFunc); // this is, say, v2 here.
事件不是全局的,它们来自特定对象,如果您想要接收它们的事件,您必须听取这些特定对象。
如果您将视图直接绑定到彼此,您很快就会陷入混乱,其中所有内容都与其他所有内容直接相关。通常的解决方案是创建自己的事件总线:
// Put this where ever it makes sense for your application, possibly
// a global, possible something your your app's global namespace, ...
var event_bus = _({}).extend(Backbone.Events);
然后v1
会通过event_bus
发送事件:
event_bus.trigger('myEvent');
和v2
会收听event_bus
:
this.listenTo(event_bus, 'myEvent', this.myFunc);