0

プロジェクトでバックボーンを使用しようとしています。しかし、バックボーンの解析メソッドをオーバーライドしようとすると問題が発生しました。サーバーから必要以上のデータが返されました。例: 必要なものは次のとおりです。

[{
   id: "123",
   name: "david"
},{
   id: "456",
   name: "kevin"
}]

しかし、サーバーの結果は次のとおりです。

{
 total: 1000,
 items:[{
   id: "123",
   name: "david"
},{
   id: "456",
   name: "kevin"
}]
}

parse メソッドで処理結果を取得し、配列のみを返します。これどうやってするの?しようとすると、エラーが発生しました。どうすればいいですか?

4

2 に答える 2

7

バックボーン モデルで、必要に応じて解析関数を定義します。

Model = Backbone.Model.extend({
    parse: function () {
        return {
            id: this.get("id"),
            name: this.get("name")
        }
    }
});

ただし、次のように、モデル初期化子でデータを処理および設定する方がよいでしょう。

Model = Backbone.Model.extend({
    initialize: function (attrs) {
        try {
            //TODO HERE: test for correct values and throw errors

            // set object variables here
            this.set({
                name: attrs.name,
                id: attrs.id
            });

        } catch (e) {
            console.log(e);
        }
    }
});

parse 関数を上書きする必要はありません。このようにして、モデルが処理しているデータが適切であることを確認し、含まれる変数を設定します。これにより、無効なデータによる多くのエラーが回避されます。

配列内の各項目は、実際にはサブモデルである必要があります。これは、上で書いたものです。親モデルは次のようになります。

Model = Backbone.Model.extend({
    initialize: function (items) {
        this.subModels = [];
        items.forEach(function (item) {
            this.subModels.push( new SubModel(item) )
        });
    }
});

またはコレクションとして:

Collection = Backbone.Collection.extend({
    model: ItemModel,
});

response.items を渡す先

于 2012-08-20T12:51:43.217 に答える
4

Backbone Parse ドキュメントから

Collection = Backbone.Collection.extend({
    model: YourModel,
    parse: function(response){
        return response.items;
    }
});
于 2012-08-20T14:22:21.493 に答える