2013-03-24 7 views
18

これは、これはコレクションバックボーンコレクションがリセットされ発生しませんフェッチ()

var mssg = mssg || {}; 

mssg.Messages = Backbone.Collection.extend({ 
    model : mssg.Message, 
    url : 'messages' 
}); 

ある

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 || {}; 

$(function() { 
    new mssg.MessagesView({ 
     collection : new mssg.Messages() 
    }); 
}); 

resetにバインドされたrender機能がajaxフェッチ要求の後に起動しないという問題があります。

私はaddにバインドすれば動作します。 私はデバッグ機能にallをバインドしようとしましたが、syncイベントはすべての項目に対してaddと並んで呼び出されます。

+2

this.collection.fetch({reset:true})を試してもよろしいですか? – nikoshr

+0

@nikoshrは働いてくれてありがとう!私はそれが暗黙のthoと思った? –

答えて

33

あなたがバックボーンchange logをチェックすると、あなたは道がフェッチていることがわかります1.0に変更処理されます。

改名コレクションの「アップデート」(似た model.setと並列処理のために、設定します)、リセットと対比。フェッチ後のデフォルトのアップデート メカニズムです。あなたは「リセット」の使用を継続したい場合は、リセットイベントをトリガするために、そう {reset: true}

を渡し、あなたは今、バックボーン1.0に

this.collection.fetch({reset: true}) 
+0

クールな感謝、それは新しいアプリですので、私は単に新しいデフォルト( 'set')に切り替えました。 –

0

を使用する必要があり、あなたがリセットをトリガする必要があり手で:

youColloection.fetch({reset: true}); 
関連する問題