1

我有一个日历日模型,并且在每个日历日,我都有一系列事件。

如果当天有事件,集合刷新,没问题,我展示新事件。但是,如果当天没有事件,则集合不会被清空,并且集合仍会显示最后一个模型当天的事件(如果用户去第二天,则为前一天)。

我已经在模型的获取成功中创建了集合,因此它不应该是异步问题。

我的模型是

Myapp.Models.CalDay = Backbone.Model.extend({
    网址:'日历',
    初始化:函数(){

        this.get_cal();
        },
    get_cal:函数(){

        //日历不存在,所以第一次通过,
            Myapp.CurrentCal = 这个;
            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:函数(){

        console.log(Myapp.CurrentCal.Events);

        Myapp.Calendar.fetch({
        成功:功能(响应){

            Myapp.CurrentCal.Events.reset(response.attributes.calendar_events);
            Myapp.CurrentCal.trigger("fetched");
                },
          错误:函数(){
              alert('获取日历出错');
            }
        });


    },
    获取视图:函数(){
          console.log(Myapp.CurrentCal.Events);
          新的 Myapp.Views.CalendarDay();

    }
});
4

2 回答 2

0

您需要remove()在渲染接下来的几天事件之前(好吧,我建议之前)调用您的视图。

如果您使用事件呈现新的一天,这不会导致您出现问题,因为视图的容器正在被这些事件覆盖。但是,如果第二天包含个新事件,则不会写入任何内容,因此您仍然会显示前几天的事件。

考虑为您的视图创建一个关闭方法,并在视图上执行该remove()函数的同时清理您与该视图关联的任何绑定。

我一直在config/backone.coffee为我的主干应用程序创建一个并创建一个close()函数来完成此操作:

class Backbone.View extends Backbone.View
  close: ->
    @beforeClose() if @beforeClose?
    @remove()
    @unbind(null,null,this)
于 2012-11-05T04:49:11.800 回答
0

正如文档所说,reset在不传递任何模型作为参数的情况下调用将是空collection的。因此,对于所有不需要调用的days地方,无需将模型作为参数传递或从服务器返回空数组,如您所说。eventsreset

和/或者您可以在回调中检查响应success并根据条件调用

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

或者

Myapp.CurrentCal.Events.reset();
于 2012-11-06T05:14:02.850 回答