簡體   English   中英

骨干集合在重置時不會為空

[英]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 因此,在所有沒有eventsdays里,您都需要調用reset而不將模型作為參數傳遞,或者像您所說的那樣從服務器返回空數組。

和/或您可以在success回調中根據條件調用檢查響應

Myapp.CurrentCal.Events.reset(response.attributes.calendar_events);

要么

Myapp.CurrentCal.Events.reset();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM