16

ページの読み込み時に、この手法を使用してデータをコレクションにブートストラップしています。それはうまく機能しますが、キャストする必要があるサブモデルがあるという問題に直面しています。

たとえば、Book という JSON コレクションを返します。各 book 配列には、Pages と呼ばれる 10 ~ 20 個のモデル自体が含まれています。Pages に直接アクセスしようとすると、[object][object]Backbone がオブジェクトのタイプを認識できないため、エラーが発生します。

以前は を使用していたときは、アクションfetchを含むコレクションを使用してこれを回避していました。parse私はparse次のようなことをします:

Collection_Books = Backbone.Collection.extend({
    model: Model_Book,
    parse: function (response) {
        response.Pages = new Collection_Pages(response.Pages);
        return response;
    }
});

を使用せずにデータに直接アクセスしているため、ドキュメントには、メソッドfetchにアクセスできなくなっていることが示されています。parse

ページの読み込み時にサーバーを使用fetchまたは呼び出していない場合、Books > Pages の例を使用してサブモデルをキャストするにはどうすればよいですか?

4

2 に答える 2

57

これが新しいかどうかはわかりませんがparse、 options パラメーターのプロパティをコンストラクターに true に設定して、コンストラクターに parse メソッドを使用するように指示することもできるようです。

modelInstance = new MyModel(obj, {parse: true});

http://backbonejs.org/#Model-constructor

于 2013-02-19T05:32:03.320 に答える
11

更新:この回答は現在古くなっています。最新情報については、 uglymunkyの回答を参照してください。


そうです、中に呼び出されるように指定されているだけなparseので、生データからコレクションを構築しているときに呼び出されることはありません。fetch

ただし、コレクションのブートストラップに使用している生データを制御するため、コレクションをparse自分で呼び出すことができます。

var c = new YourCollection(
    YourCollection.prototype.parse([
        // attribute data goes here...
    ])
);

デモ: http: //jsfiddle.net/ambiguous/kdaZ3/

parseメソッド(コレクションとモデルの両方)は、呼び出しコンテキストを気にする必要がないため、プロトタイプから直接呼び出すことで問題ありません。

于 2012-06-17T05:24:38.033 に答える