use*_*094 12 backbone.js backbone-events
我对如何处理Backbone中的视图之间的事件感到困惑.现在我在网站上同时呈现了两个部分视图.现在我希望其中一个视图调度另一个视图可以侦听的事件.我该怎么做?
在调度我运行的事件的视图中:
this.trigger("myEvent")
Run Code Online (Sandbox Code Playgroud)
在视图中听我跑:
this.bind('myEvent', this.myFunc);
Run Code Online (Sandbox Code Playgroud)
但似乎没有任何事情发生.
mu *_*ort 26
如果您正在触发事件v1:
this.trigger('myEvent'); // this is v1
Run Code Online (Sandbox Code Playgroud)
然后你必须听从以下事件v1:
v1.on('myEvent', this.myFunc); // this is, say, v2 here.
Run Code Online (Sandbox Code Playgroud)
事件不是全局的,它们来自特定对象,如果要接收事件,则必须侦听这些特定对象.
如果你将视图直接绑定到彼此,你很快就会陷入混乱,一切都直接与其他一切联系在一起.通常的解决方案是创建自己的事件总线:
// 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);
Run Code Online (Sandbox Code Playgroud)
然后v1通过以下方式发送事件event_bus:
event_bus.trigger('myEvent');
Run Code Online (Sandbox Code Playgroud)
并v2会听取event_bus:
this.listenTo(event_bus, 'myEvent', this.myFunc);
Run Code Online (Sandbox Code Playgroud)
我也从切换bind到listenTo,因为listenTo可以更容易地防止僵尸.
演示:http://jsfiddle.net/ambiguous/yb9TY/
| 归档时间: |
|
| 查看次数: |
11219 次 |
| 最近记录: |