web-dev-qa-db-ja.com

バックボーンコレクションフェッチはreset()を起動しません

これは私のコレクションに対する見方です

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イベントが呼び出されると表示されます。

18
David Fregoli

バックボーンをチェックすると 変更ログ 、1.0ではフェッチの処理方法が変更されていることがわかります。

同様のmodel.set()との並列処理、およびリセットとの対比のために、コレクションの「更新」の名前をsetに変更しました。これは、フェッチ後のデフォルトの更新メカニズムになりました。 「リセット」を引き続き使用する場合は、{reset: true}を渡します。

したがって、リセットイベントをトリガーするには、次を使用する必要があります

this.collection.fetch({reset: true})
33
nikoshr

バックボーン1.0では、手動でリセットをトリガーする必要があります。

youColloection.fetch({reset: true});
0
freestyle21