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 に答える