_bind.All
バインディングとbackbone.jsの目的について混乱しています。#modal
以下は、モーダルビューを作成し、バックエンドからフェッチされたコメントをレンダリングする作業コードです。
まず、以下のコードでは、initialize
関数にあります_.bindAll(this, 'render', 'renderComments');
。私がするかどうかにかかわらず_.bindAll()
、私は電話this.render()
とthis.renderComments()
内部に問題はありませんinitialize()
。いつ助けになるのか、いつ役に立たないのかという例はあり_.bindAll()
ますか?
ModalView = Backbone.View.extend({
el: $('#modal'),
template: _.template( $('#tpl_modal').html() ),
initialize: function() {
_.bindAll(this, 'render', 'renderComments');
this.render();
this.renderComments();
},
render: function() {
$(this.el).fadeIn('fast').append( this.template( this.model.toJSON( this.model ) ) );
},
renderComments: function() {
this.commentList = new CommentCollection();
var self = this;
this.commentList.fetch({
data: { post_id: this.model.id},
processData: true,
success: function() {
self.commentListView = new CommentListView({ collection: self.commentList });
}
});
}
});
と
CommentListView = Backbone.View.extend({
el: '.modal_comments',
initialize: function() {
this.render();
},
render: function() {
var self = this;
this.collection.each( function(comment, index) {
$(self.el).append( new CommentListItemView({ model: comment }).render().el );
});
return this;
}
});
第二に、私は何かの前に置くことについて混乱this.
しています。たとえば、でrenderComments
、なぜ私は使用できないのですか?
var commentList = new CommentCollection();
var self = this;
commentList.fetch({.... });
行の場合、クラスをthis.commentList = new CommentCollection();
インスタンス化する以外に、の子になりますか?CommentCollection()
commentList
ModalView
さらに、コールバック関数で後でvar self = this;
使用する必要がありますか?self.commentListView
バインディングを使用してアクセスできるようにすることはできますthis.commentListView
か、それともvar self = this
従来の方法を使用していますか?
最後にself.commentListView = new CommentListView({ collection: self.commentList });
、success関数では、代わりにのinitializeメソッドにrenderComments
移動し、バインドして、あまりにも多くの関数をネストしないようにする必要がありますか?これにより、次のようになります。CommentListView
this.collection.on('reset');
ModalView = Backbone.View.extend({
el: $('#modal'),
template: _.template( $('#tpl_modal').html() ),
initialize: function() {
_.bindAll(this, 'render', 'renderComments');
this.render();
this.renderComments();
},
render: function() {
$(this.el).fadeIn('fast').append( this.template( this.model.toJSON( this.model ) ) );
},
renderComments: function() {
this.commentList = new CommentCollection();
this.commentListView = new CommentListView({ collection: this.commentList });
this.commentList.fetch({
data: { post_id: this.model.id},
processData: true
});
}
});
CommentListView = Backbone.View.extend({
el: '.modal_comments',
initialize: function() {
this.collection.on('reset', this.render, this);
},
render: function() {
var self = this;
this.collection.each( function(comment, index) {
$(self.el).append( new CommentListItemView({ model: comment }).render().el );
});
return this;
}
});