2012-08-14 111 views
1

最近我一直在Backbone嘗試我的手,並且有一個非常基本的問題。Backbone搜索多個模型

我需要尋找不同類型的記錄和搜索API返回類似

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

JSON響應我有富,酒吧和巴茲骨幹模型。取回時的集合應打到我的服務器並將搜索結果提供給我。我試圖像

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

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

不過,我不知道如何解析服務器返回的結果讓我收集持有車型富,酒吧和巴茲?還是應該調整服務器返回的結果,以便更容易地通過Backbone處理這個結果?

+1

我認爲你只是走向這種架構的地獄投注方式......另一方面,我看到很多不匹配在你的示例代碼中,例如你的'function'沒有返回事情..我不認爲任何人會發送'attrs'和'選項'到你的'Collection.model()'...並且即使你收到你的JSON請求作爲'attrs'參數這個'attrs ['foo']'與您的JSON示例中的任何內容不匹配。總結:我想你應該重建你的問題,以避免混淆信息。 – fguillen 2012-08-14 15:11:32

+0

感謝您指出@fguillen的不一致之處。我試圖簡化這個問題。 如果你仍然覺得我完全錯誤的方式,請讓我知道,所以我會回到繪圖板。 – membLoper 2012-08-14 17:18:40

回答

0

正如我看到你的JSON不返回3個不同的模型,但3個不同的集合,因爲其中3個包含數組。

我想你應該從一開始就WEEL要返回一堆不同類型的模型,假設開始,如果我的理解:

[ 
    { 
    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 
}); 

從在這裏,我們可以做到這一點簡單的,如果沒有它的實際需要不產生結果的子類:

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" 

可是我還是不通過兩方面的原因感到舒適:

  • 我不明白清楚爲什麼要與Result.url玩。
  • 模型的ids在哪裏?這對Backbone非常重要。
+0

謝謝fguillen提供了一個好的骨架。我目前正在玩JSON響應,並會在我對它進行分類時用我的作品更新這個空間。 – membLoper 2012-08-15 15:27:02