在backbonejs中创建一个复杂的集合

时间:2012-09-22 08:29:37

标签: javascript backbone.js

简而言之,我希望对其他集合和模型进行骨干深度收集

结构就像这样

[{
    mainCategory: "Something"
    subCategories: [
        {
            category: "SomethgingElse",
            labs: [
            {
                id: 1,
                title: "Title",
                description : "Lorem ipsum dolor sit amet"
                availablelanguages: ["fr","en"]
            },
            {
                id: 2,
                title: "Another Title",
                description : "Lorem ipsum dolor sit amet",
                availablelanguages: ["fr","en"]
            }]
        },
        {
            category: "Testing",
            labs: [
            {
                id: 1,
                title: "ZZZZ",
                description : "Lorem ipsum dolor sit amet"
                availablelanguages: ["ar","en"]
            },
            {
                id: 2,
                title: "VVVVV",
                description : "Lorem ipsum dolor sit amet",
                availablelanguages: ["ar","en"]
            }]
        }

    ]
}]

我定义了一些集合和模型,如下所示

var Item = Backbone.Model.extend({
    defaults: {
        title : '',
        description: '',
        availableLangagues : []
    }
});
var Items = Backbone.Collection.extend({
    model: Item
});

var Category = Backbone.Model.extend({
    defaults: {
        categoryName: '',
        labsList: new Items()
    }
});
var Categories = Backbone.Collection.extend({
    model: Category
});
var TopCategory = Backbone.Model.extend({
    defaults: {
        topCategory: "",
        categories: new Categories()
    }
});
var TopCategories = Backbone.Collection.extend({
    model: TopCategory
});

我的问题在这里我想在fetch上呼叫TopicCategories我希望填充所有内容,fetch将返回JSON,就像示例中传递的一样,但是如果我在fetch上调用TopCategories它将返回数据,但数组将只是普通的JavaScript数组而不是我想要的默认主干集合

1 个答案:

答案 0 :(得分:2)

您要做的是利用您的顶级模特的parse()功能。在这个经过修改的解析中,您所做的是从响应中梳理出不同的对象/数组,并将它们转换为您想要的集合。示例:TopCategory模型中的parse()

parse: function(response) {

    if (response.subCategories){

        if (!this.subCategories) {
            this.subCategories = new Categories(response.subCategories);
        } else {
            this.subCategories.reset(response.subCategories);
        }

        delete response.subCategories;
    }

    return response;
}

您将在每个父模型的解析定义中执行此模式,该模型具有您要解析的某种主干集合。

此链接可能会为您提供更多有关如何运作的建议。

Dealing with nested collections