this
何らかの理由で、ビューをレンダリングするためにコールバックに正しく渡されません。_.bind および _.bindAll メソッドを試しましたが、コンテキストを渡すためにどの方法を使用しても、常に初期化時とは異なるレンダリングthis
になります。
どんな助けでも大歓迎です
Navigation.Collection = Backbone.Collection.extend({
model : Navigation.Model,
comparator : function(item) {
return item.get("orderId");
}
});
Menu = new Navigation.Collection();
Navigation.Views.List = Backbone.View.extend({
el : 'nav',
tagName : "div",
className : "navigation",
collection : Menu,
initialize : function(e) {
console.log(this);
this.template = "navigation/list";
this.settings = Settings;
this.collection.on("add", this.render, this);
},
render: function() {
console.log(this);
var renderedContent = this.template(this.collection.toJSON());
console.log(renderedContent);
return this;
},
バインドの例:
initialize : function(e) {
this.collection.on("add", _.bind(this.render, this));
}
bindAll の例:
initialize : function(e) {
_.bindAll(this, "render");
this.collection.on("add", this.render);
}
コンソール出力
最初の印刷:
child {cid: "view2", options: Object, views: Object, __manager__: Object, _removeViews: function…}
2 番目の印刷:
Object {resolve: function, resolveWith: function, reject: function, rejectWith: function, notify: function…}
編集:「レンダリング」が呼び出される場所を追加します。これは、Navigation.View.List(上記参照) がコードで定義された直後です。
Navigation.registerModule = function(data) {
_.extend(data, {
id : Math.random()
});
Menu.add(new Navigation.Model(data));
Navigation.LayoutManager.removeView(true);
Navigation.cachedRendering = null;
};
Navigation.View = new Navigation.Views.List();
Navigation.LayoutManager = new Backbone.Layout({
views : {
nav : Navigation.View
}
});
Navigation.LayoutManager.$el.appendTo("nav");
Navigation.LayoutManager.render();
return Navigation;
編集: 他の誰かが同じことに出くわした場合、解決策はbeforeRender
andを使用することafterRender
です。依存関係をアップグレードしていて、 backbone.layoutmanagerの古いバージョンにはこれら 2 つのヘルパーがなく、render()
代わりに使用されたために、状態manage
にアクセスするためのパラメーターが使用されたため、混乱が発生しましたafter
。