0

我脑子里有这个模型结构:

var app = app || {};

// Caratteristica
app.Attribute = Backbone.Model.extend({
    defaults: {     
        name: '',
        selected: false 
    }
});

app.Attributes = Backbone.Collection.extend({
    model: app.Attribute
});

// Tipo Caratteristica
app.AttributeCategory = Backbone.Model.extend({
    defaults: {     
        name: '', 
        attributes: new app.Attributes() 
    }
});

app.AttributeCategories = Backbone.Collection.extend({
    model: app.AttributeCategory, 
    url: '/ajax/attributes.cfm'
});

我在'/ajax/attributes.cfm'中的 API会给我这样的响应:

[
    {
        "id": "1",
        "name": "Type1",
        "attributes": [
            {
                "id": "1",
                "name": "Attribute1"
            },
            {
                "id": "2",
                "name": "Attribute2"
            },
            {
                "id": "3",
                "name": "Attribute3"
            }
        ]
    },
    {
        "id": "2",
        "name": "Type2",
        "attributes": [
            {
                "id": "1234",
                "name": "Attribute1234"
            },
            {
                "id": "2567",
                "name": "Attribute2567"
            }
        ]
    }
]

我的问题是:这个 json 数据会被正确解析到我的嵌套数据结构中吗?我的意思是我想最终在我的app.AttributeCategories集合中有两个app.AttributeCategory项目。然后,这两项中的每一项都必须使用相应的app.Attributes集合填充其attributes属性。

如果答案是否定的,我将如何覆盖parse()函数以实现该结果?

4

2 回答 2

1

我是这样做的:

// Tipo Caratteristica
app.AttributeCategory = Backbone.Model.extend({
    defaults: {     
        name: ''
    },
    initialize: function(options) {
        this.set('attributes', new app.Attributes(options.attributes));
        Backbone.Model.prototype.apply(this, arguments);
    }
});

但最好使用 RationalModel 来建立模型之间的关系

于 2013-08-06T11:54:54.417 回答
0

您可以在 AttributeCategory 模型的初始化方法中创建集合,如下所示:

app.AttributeCategory = Backbone.Model.extend({

    ...

    initialize: function () {
      this.set('attributes', new app.Attributes(this.get('attributes')));
    }
});
于 2013-08-06T12:42:06.873 回答