これは私のコレクションに対する見方です
var mssg = mssg || {};
mssg.MessagesView = Backbone.View.extend({
el: '#messages',
initialize: function() {
this.collection.fetch();
this.collection.bind('reset', this.render, this);
},
render : function() {
this.$el.html('');
this.collection.each(function( item ) {
this.renderMessage( item );
}, this );
return this;
},
renderMessage : function( item ) {
var messageView = new mssg.MessageView({
model : item
});
this.$el.append( messageView.render().el );
}
});
これはコレクションです
var mssg = mssg || {};
mssg.Messages = Backbone.Collection.extend({
model : mssg.Message,
url : 'messages'
});
これが初期化の方法です。
var mssg = mssg || {};
$(function() {
new mssg.MessagesView({
collection : new mssg.Messages()
});
});
問題は、render
にバインドされたreset
関数がajaxフェッチリクエストの後に起動しないことです。
add
にバインドすると機能します。 all
をdebuggin関数にバインドしようとしましたが、すべてのアイテムのsync
と一緒にadd
イベントが呼び出されると表示されます。
バックボーンをチェックすると 変更ログ 、1.0ではフェッチの処理方法が変更されていることがわかります。
同様のmodel.set()との並列処理、およびリセットとの対比のために、コレクションの「更新」の名前をsetに変更しました。これは、フェッチ後のデフォルトの更新メカニズムになりました。 「リセット」を引き続き使用する場合は、
{reset: true}
を渡します。
したがって、リセットイベントをトリガーするには、次を使用する必要があります
this.collection.fetch({reset: true})
バックボーン1.0では、手動でリセットをトリガーする必要があります。
youColloection.fetch({reset: true});