0

私のアプリケーションには、次のJSONデータ形式があります。

{
    Item: {
        property1: '',
        ...
    }
}

このstackoverflow.comの回答の解決策に従って、Backbond.jsモデルを次のようにモデル化しました。

App.Models.Item = Backbone.Model.extend({

});

App.Models.ItemData = Backbone.Model.extend({
    defaults: {
        'Item': new App.Models.Item
    }
});

次の方法で、ページのバックエンドシステムからアプリにデータをブートスタンプします。

var item = App.Models.ItemData({
    {Item: 
        {property1: 'data'}
    }
});

私が今抱えている問題はitem.get('Item')、デフォルトが上書きされるため、Backbone.ModelオブジェクトではなくプレーンなJavaScripオブジェクトを返すことです。App.Models.Itemオブジェクトであることを確認しながら、Backbone.jsオブジェクトを作成するにはどうすればよいですか?item.get('Item')

また、Backbone.Modelsをネストする場合は、カスタムゲッターメソッドを作成する必要があることも読みました。これにより、アプリの残りの部分が内部データ構造について知る必要がなくなります。もしそうなら、それらのセッターとゲッターを実装する正しい方法は何ですか?

4

1 に答える 1

2

モデルのparseメソッドをオーバーライドできます。ItemData必要ありませんdefaults。parseメソッドは、モデルが渡されない場合、空のモデルを初期化します。

App.Models.ItemData = Backbone.Model.extend({
   parse: function(attrs) {
     attrs = attrs || {};
     if(!(attrs.Item instanceof App.Models.Item))
       attrs.Item = new App.Models.Item(attrs.Item);

     return attrs;
   }
});

ItemData次に、オプションを使用してモデルを初期化しparse:trueます。

var item = new App.Models.ItemData({Item:{property1: 'data'}}, {parse:true});
于 2013-02-01T13:37:59.683 に答える