0

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

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

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

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

});

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

我现在想在页面加载时将数据从后端系统引导到我的应用程序,方法如下:

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 的正确方法是什么?

4

1 回答 1

2

您可以覆盖模型parse上的方法ItemData。不需要defaults。如果未通过,则 parse 方法将初始化一个空模型:

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});
于 2013-02-01T13:37:59.683 回答