我想弄清楚为什么会这样有效:
var TestView = Backbone.View.extend({
views: {},
initialize: function(){
this.bind('transistion:complete', this.onPageLoaded);
},
onPageLoaded: function(){
alert("works!");
}
});
var v = new TestView();
v.trigger('transition:complete');
但这不起作用:
var TestView = Backbone.View.extend({
views: {},
events:{
'transition:complete': 'onPageLoaded'
},
onPageLoaded: function(){
alert("works!");
}
});
var v = new TestView();
v.trigger('transition:complete');
能够从视图的事件对象中触发我的自定义事件更为简洁。无论如何我可以让这个工作吗?
答案 0 :(得分:8)
{DOM}事件(如点击)指定了events
哈希,而通过trigger
触发并通过on
绑定的事件是Backbone的内部事件。因此,当您转到v.trigger('eventname')
时,该事件不是DOM事件,而是特定于Backbone。
了解更多here
答案 1 :(得分:6)
Backbone事件哈希与DOM相关联,而不是与View相关联。
检查如何将触发器运行到View元素中:
var TestView = Backbone.View.extend({
events:{
'transition:complete': 'onPageLoaded'
},
onPageLoaded: function(){
alert("works!");
}
});
var v = new TestView();
v.$el.trigger('transition:complete');
但是如果自定义事件不需要绑定到元素,那么你的第一个代码就可以了,只需用on替换bind,就像这样:
this.on('transistion:complete', this.onPageLoaded);