1

出于某种原因,虽然以前工作正常,但 haveeleventsbindings 现在停止正常工作。

我已经有了:

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不再正确绑定到#headerDOM。相反,它是用 empty 实例化的div,这可以很容易地确认:如果我el使用 Firebug ( console.log(this.$el.parent().html()) 进行调试,我会得到:

null

我期望得到的是这样的:

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

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

view.headerView = new HeaderView(parentView);

有什么想法可以解决这个问题或进一步调试吗?

4

1 回答 1

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});
于 2012-05-08T13:13:44.967 回答