[英]backbone collection won't empty on reset
我有一個日歷日模型,在每個日歷日中,我都有一系列事件。
如果當天有事件,則刷新集合,沒問題,我將顯示新事件。 但是,如果當天沒有事件,則不會清空集合,並且該集合仍會顯示最后一個模型(如果用戶轉到第二天的前一天)那一天的事件。
我已經在成功獲取模型的過程中創建了集合,所以它不應該是異步問題。
我的模特是
Myapp.Models.CalDay = Backbone.Model.extend({ url:'calendar', initialize: function(){ this.get_cal(); }, get_cal: function(){ //calendar doesn't exist, so first time through, Myapp.CurrentCal = this; Myapp.cal.set({'date': new Date(),'draw_slider': true,'put_date':'today'}); Myapp.CurrentCal.Events = new Myapp.Collections.DayEvents(); this.bind('change:date',this.fetch_cal); this.fetch_cal(); } Myapp.CurrentCal.bind("fetched",this.get_view); }, fetch_cal: function(){ console.log(Myapp.CurrentCal.Events); Myapp.Calendar.fetch({ success: function(response) { Myapp.CurrentCal.Events.reset(response.attributes.calendar_events); Myapp.CurrentCal.trigger("fetched"); }, error: function() { alert('error getting calendar'); } }); }, get_view: function(){ console.log(Myapp.CurrentCal.Events); new Myapp.Views.CalendarDay(); } });
您需要在渲染第二天的事件之前(好吧,我之前曾表示過)在視圖中調用remove()
。
在使用事件渲染新的日子的情況下,這不會引起問題,因為視圖的容器已被這些事件覆蓋。 但是,在第二天包含零個新事件的情況下,不會寫入任何內容,因此您會留下前幾天仍在顯示的事件。
考慮為您的視圖創建一個close方法,並在視圖上執行remove()
函數還可以清理與該視圖關聯的所有綁定。
我一直在為我的主干應用程序創建config/backone.coffee
,並創建一個close()
函數來完成此操作:
class Backbone.View extends Backbone.View
close: ->
@beforeClose() if @beforeClose?
@remove()
@unbind(null,null,this)
正如文檔所述,在不傳遞任何模型作為參數的情況下調用reset
將會清空collection
。 因此,在所有沒有events
的days
里,您都需要調用reset
而不將模型作為參數傳遞,或者像您所說的那樣從服務器返回空數組。
和/或您可以在success
回調中根據條件調用檢查響應
Myapp.CurrentCal.Events.reset(response.attributes.calendar_events);
要么
Myapp.CurrentCal.Events.reset();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.