2011-11-22 101 views
2

我無法弄清楚從服務器獲取模型集合到我的Backbone集合中的正確方法,假設我不想從數據庫獲取所有模型,而是需要一組模型(由特定模型過濾屬性)。如何使用Backbone.js從服務器獲取模型集合?

我能想出的唯一方法是重寫Fetch並使用函數的「options」參數將過濾器定義傳遞給我的Backbone.Sync函數。

有沒有更好的方法?

回答

1

3最常用的方式設置的集合, 是

  1. 在頁面引導模式,並加載它們與Collection.reset();

    // you can print this trough serverside in your view, (you are bootstrapping these models) 
    var bsModels = [{'name': 'name1'},{'name': 'name3'},{'name': 'name2'}]; 
    
    // in your code you can use that bootstrapped data via the reset method. 
    var myModel = Backbone.Model.extend({}); 
    var myCollection = Backbone.Collection.extend({ 
        model: myModel 
    }); 
    myCollection.reset(bsModels); 
    
  2. 您可以使用fetch,但它會加載任何和所有的方法,除非你重寫獲取方法

  3. 第三種選擇是寫你的ow ñAjax調用,取模型的正確用量,並使用相同的技術,因爲在#1,採用Collection.reset(data);

0

當然,有一個更好的辦法!您可以將查詢參數傳遞給您的fetch()調用。所有傳遞給獲取的選項都直接進入$.ajax()。因此,例如:

myCollection.fetch({ 
    data: { 
    search: "boo", 
    limit: "20" 
    } 
} 

因爲這變成一個GET請求,這些將被追加到查詢字符串,你可以分析他們的服務器上,並返回相應項目的收集。

如果您覺得奇特,可以重新定義fetch()以獲取特定類型的集合,以便始終發佈適當的查詢參數。

相關問題