Backbone - 视图事件对象中的自定义事件

时间:2012-06-25 11:50:28

标签: javascript-events backbone.js

我想弄清楚为什么会这样有效:

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');

能够从视图的事件对象中触发我的自定义事件更为简洁。无论如何我可以让这个工作吗?

2 个答案:

答案 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);