1

何らかの理由で、以前は正常に機能していましたが、haveeleventsバインディングが正しく機能しなくなりました。

私が持っていた:

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 */);
    }
});

以前はこれは問題なく機能していましたが、何らかの理由で、DOMでel正しくバインドされなくなりました。#header代わりに、空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 に答える