0

我正在尝试解析一个多级 json 文件,创建一个模型,然后将该模型添加到骨干集合中,但我似乎无法弄清楚如何将模型推送到集合中。这应该是一个很容易解决的问题,我似乎无法弄清楚。在此先感谢您的帮助。以下是我的模型和集合代码:

var Performer = Backbone.Model.extend({

defaults: {
    name: null,
    top5 : [],
    bottom5 : []
},
initialize: function(){
    console.log("==> NEW Performer");

    // you can add event handlers here...


 }
});

var Performers = Backbone.Collection.extend({

url:'../json_samples/performers.json',
model:Performer,
parse : function(data) {
    // 'data' contains the raw JSON object
    console.log("performer collection - "+data.response.success);

    if(data.response.success)
    {
        _.each(data.result.performers, function(item,key,list){
            console.log("running for "+key);
            var tmpObject = {};
            tmpObject.name = key;
            tmpObject.top5 = item.top5;
            tmpObject.bottom5 = item.bottom5;
            var tmpModel = new Performer(tmpObject);
            this.models.push(tmpModel);
        });

    }
    else
    {
        console.log("Failed to load performers");
    }
}

});

4

1 回答 1

1

正如在对您的问题的评论中所说,parse()不打算以这种方式使用。如果data.results.performers是一个Array,你所要做的就是返回它。在您的情况下,代码会略有不同。

var Performers = Backbone.Collection.extend({
    ...
    parse: function(resp, options) {
        return _.map(resp.result.performers, function(item, key) {
            return _.extend(item, {name: key});
        });
    }
    ...
});

在建议方面,如果您有机会更改 API 服务器端,最好将对象集合视为数组而不是对象。即使有时通过一些特殊键访问对象很方便,但数据确实是一个数组。

当您需要使用下划线的IndexBy之类的函数按名称指定表演者时,您将能够稍后对其进行转换

于 2013-10-09T23:55:00.313 回答