Backbone.Marionette的嵌套集合

时间:2012-08-28 15:57:37

标签: backbone.js marionette

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

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

日模型需要是约会的集合,不需要从服务器获取数据,因为它每天都在里面。

我该怎么做?

2 个答案:

答案 0 :(得分:15)

如果我理解正确的问题,那么您问的是如何将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);

希望有所帮助。

答案 1 :(得分:2)

这看起来像是backbone-relational的完美用例,它会自动处理解析嵌套数据并创建嵌套集合结构。