Backbone.js`el`和`events`没有正确绑定

时间:2012-05-08 12:55:39

标签: backbone.js

出于某种原因,虽然以前工作得很好,但elevents绑定现在已停止正常工作。

我有:

User.HeaderView = Backbone.View.extend({
    el: '#header',
    template: _.template($('#header-template').html()),
    events: {
        "click .login": "login"
    },
    initialize: function(parentView) {
        this.parentView = parentView;
    },
    render: function() {
        this.parentView.render();
        this.el.innerHTML = this.template(/* pass model */);
    }
});

以前这个工作正常,但由于某种原因,el不再正确绑定到DOM中的#header。相反,它使用空div进行实例化,可以很容易地确认:如果我使用Firebug调用elconsole.log(this.$el.parent().html()),我会得到:

null

我期待得到的是:

<div id="header"><ul></ul></div>

这是我目前用于初始化视图的方法:

view.headerView = new HeaderView(parentView);

我是如何解决此问题或进一步调试的?

1 个答案:

答案 0 :(得分:1)

initialize需要一个包含您希望传递给视图的选项的对象。在这里,您传递一个视图,该视图是一个对象,可能已经设置了el属性,覆盖了您在HeaderView中声明的属性。尝试

User.HeaderView = Backbone.View.extend({
    el: '#header',
    template: _.template($('#header-template').html()),
    events: {
        "click .login": "login"
    },
    initialize: function(options) {
        this.parentView = options.parentView;
    },
    render: function() {
        this.parentView.render();
        this.el.innerHTML = this.template(/* pass model */);
    }
});

new HeaderView({parentView:parentView});