2013-03-24 112 views
18

這是我收集骨幹集合取不火復位()

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() 
    }); 
}); 

問題是綁定到resetrender函數在ajax提取請求之後不會觸發。

如果我將它綁定到add它的作品。 我嘗試綁定all到調試函數,它說sync事件與add並列調用每個項目。

+2

你可以試試this.collection.fetch({reset:true})? – nikoshr 2013-03-24 19:53:25

+0

@nikoshr謝謝你的工作!我認爲這是暗示壽? – 2013-03-24 20:00:20

回答

33

如果選中骨幹change log,你會看到這樣取1.0的處理改變:

更名爲集合的「更新」設置,並行性與同類 model.set()並與重置進行對比。現在它是在獲取之後的默認更新 機制。如果您想繼續使用「復位」,通過 {reset: true}

因此,觸發復位事件,你現在必須使用

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

酷感謝,這是一個新的應用程序,所以我只是切換到新的默認('集') – 2013-03-24 20:24:28

0

骨幹1.0,你必須觸發復位由手:

youColloection.fetch({reset: true});