嵌套集合与Backbone.Marionette(Nested collections with B

2019-06-27 12:15发布

我想创建一个日历,全天集,而且每天都在约会的集合。 一天对象的结构是:

day:{
    date:'08-06-2012',
    appointment: {
        time_begin:'12:55',
        time_end: '16:40',
        customer: 'Jaime'
    }
}

在这一刻,我有这个模型和视图:

// CALENDAR COLLECTION
App.Calendar.Collection = Backbone.Collection.extend({
    // MODEL
    model: App.Day.Model
}

当日历收集获取数据形成的服务器,它得到完整的一天对象包括约会。

// CALENDAR VIEW
App.Calendar.View = Backbone.Marionette.CompositeView.extend({
    // TEMPLATE
    template: Handlebars.compile(templates.find('#calendar-template').html()),
    // ITEM VIEW
    itemView: App.Day.View,
    // ITEM VIEW CONTAINER
    itemViewContainer: '#calendar-collection-block'
});

// DAY MODEL
App.Day.Model = Backbone.Collection.extend({
    // PARSE
    parse:function(data){
        console.log(data);
        return data;
    }
});

// DAY VIEW
App.Day.View = Backbone.Marionette.CompositeView.extend({
    collection: App.Day.Model,
    itemView: App.CalendarAppointment.View, //---->I NEED TO DEFINE THIS, NOT SURE HOW
    template: Handlebars.compile(templates.find('#day-template').html())
});

当天模型需要预约的集合,因为它每天里面应该没有必要从服务器获取数据。

我怎样才能做到这一点?

Answer 1:

如果我理解正确的问题,你问如何从获取数据Day模型, Appointment收集,到CalendarApointmentView ItemView控件?

Day.View可以设置填充collection这种复合视图,这将在随后对项目的意见推的:


// DAY VIEW
App.Day.View = Backbone.Marionette.CompositeView.extend({
    collection: App.Day.Model,
    itemView: App.CalendarAppointment.View,
    template: Handlebars.compile(templates.find('#day-template').html()),

    initialize: function(){

      // since `this.model` is a `Day` model, it has the data you need
      this.collection = this.model.get("CalendarAppointments");

    }
});

有一点要注意: this.collection必须是有效的Backbone.Collection。 如果你的模型存储约定数据作为一个简单的数组,那么你需要做:

 var appointments = this.model.get("CalendarAppointments"); this.collection = new AppointmentCollection(appointments); 

希望帮助。



Answer 2:

这看起来像一个最完美的用例骨干关系 ,这将自动采取解析您的嵌套的数据,并创建嵌套集合结构的照顾。



文章来源: Nested collections with Backbone.Marionette