如何初始化嵌套的Backbone.js模型

时间:2013-02-01 13:30:46

标签: backbone.js

在我的应用程序中,我有以下JSON数据格式:

{
    Item: {
        property1: '',
        ...
    }
}

根据this stackoverflow.com回答的解决方案,我按照以下方式对Backbond.js模型进行了建模:

App.Models.Item = Backbone.Model.extend({

});

App.Models.ItemData = Backbone.Model.extend({
    defaults: {
        'Item': new App.Models.Item
    }
});

我现在想从页面上的Backend系统向我的应用程序重新启动数据,加载方式如下:

var item = App.Models.ItemData({
    {Item: 
        {property1: 'data'}
    }
});

我现在遇到的问题是item.get('Item')返回普通的JavaScrip对象而不是Backbone.Model对象,因为默认值会被覆盖。 如何在确保item.get('Item')是App.Models.Item对象的同时创建Backbone.js对象?

我还读过,如果你嵌套Backbone.Models,你应该使用自定义的getter方法,所以你的应用程序的其余部分不必知道内部数据结构。如果是这样,那么实施这些setter和getter的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以覆盖ItemData模型上的parse方法。不需要defaults。如果未传递空模型,则解析方法将初始化空模型:

App.Models.ItemData = Backbone.Model.extend({
   parse: function(attrs) {
     attrs = attrs || {};
     if(!(attrs.Item instanceof App.Models.Item))
       attrs.Item = new App.Models.Item(attrs.Item);

     return attrs;
   }
});

然后使用选项ItemData初始化您的parse:true模型:

var item = new App.Models.ItemData({Item:{property1: 'data'}}, {parse:true});