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

Han*_*pan 1 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');
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

var TestView = Backbone.View.extend({
    views: {},

    events:{
        'transition:complete': 'onPageLoaded'
    },

    onPageLoaded: function(){
        alert("works!");
    }
});

var v = new TestView();
v.trigger('transition:complete');
Run Code Online (Sandbox Code Playgroud)

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

jak*_*kee 8

events散列被指定用于DOM事件(像click),而该事件触发通过trigger和约束,通过on为骨干的内部事件.所以当你离开时v.trigger('eventname'),事件不是DOM事件,而是特定于Backbone.

在这里阅读更多


Dan*_*nda 6

骨干事件哈希与DOM相关联,而不是与视图相关联.

检查如何将触发器运行到View元素中:

var TestView = Backbone.View.extend({

    events:{
        'transition:complete': 'onPageLoaded'
    },

    onPageLoaded: function(){
        alert("works!");
    }
});

var v = new TestView();
v.$el.trigger('transition:complete');
Run Code Online (Sandbox Code Playgroud)

但是,如果不需要将自定义事件绑定到元素,那么您的第一个代码就可以了,只需将bind替换为on,就像这样:

this.on('transistion:complete', this.onPageLoaded);
Run Code Online (Sandbox Code Playgroud)