1

私は最近Backboneで手を試していますが、非常に基本的な質問があります。

別の種類のレコードを検索する必要があり、検索APIは次のようなJSON応答を返します

{ foo: 
  [
      { name: 'foo1', url: '/foo1' },
      { name: 'foo2', url: '/foo2' }
  ],
  bar:
  [ { name: 'bar1', url: '/bar1' } ],
  baz:
  [ { name: 'baz1', url: '/baz1' } ]
}

Foo、Bar、Bazのバックボーンモデルがあります。フェッチ時にサーバーにヒットし、検索結果を取得するコレクション。私は次のようなことを試みました

window.searchEntities = Backbone.Collection.extend({
  url: '/get_search_results'

  model: function(attrs, options) {
    //Typecast the JSON to Foo, Bar and Baz Models
  });      
});

ただし、サーバーから返された結果を解析して、コレクションにモデルFoo、Bar、Bazが含まれるようにする方法がわかりません。または、サーバーから返される結果を微調整して、Backboneでこれを処理しやすくする必要がありますか?

4

1 に答える 1

0

私が見ているように、あなたのJSONは3つの異なるモデルを返していませんが、3つの異なるコレクションが3つに配列を含んでいるためです。

私はあなたが最初から始めるべきだと思います、あなたが異なるタイプのモデルの束を返したいと私が理解したなら、例えば:

[
  {
    type: "Foo",
    name: "foo1",
    url: "/foo1"
  },

  {
    type: "Foo",
    name: "foo2",
    url: "/foo2"
  },

  {
    type: "Bar",
    name: "bar1",
    url: "/bar1"
  },

  {
    type: "Baz",
    name: "baz1",
    url: "/baz1"
  },
]

そこにはコレクションがあり、さまざまなタイプのさまざまなモデルもあります。

次に、SearchCollectionを見てみましょう。例で示したようなプロパティで遊ぶことはできないと思いますmodel。したがって、すべてのモデルに共通のモデルの親があるとしResultます。

window.SearchEntities = Backbone.Collection.extend({
  url: '/get_search_results'

  model: Result  
});

ここから、それを簡単に行うことができ、実際に必要がない場合はResultのサブクラスを作成しません。

window.Result = Backbone.Model.extend({
  initialize: function(){
    this.url = this.get( "url" );
  }
});

そして、これで完了です。

var searchEntities = new window.SearchEntities();
searchEntities.fetch();

// ... wait for the fetch ends

searchEntities.at(0).get( "type" ); //=> "Foo"

それでも私は2つの理由で快適に感じません:

  • なぜあなたがで遊びたいのかはっきりしませんResult.url
  • idsあなたのモデルはどこにありますか?これはバックボーンにとって非常に重要です。
于 2012-08-14T19:31:33.720 に答える