2012-10-11 93 views
0

我想在我正在寫的應用程序中有一些路線,這限制了返回結果的數量。從SpineJS fetch返回的限制記錄()

目前我在我的主控制器如下:

init: function(){ 

    MyModel.bind("refresh", this.proxy(this.addAll)); 

    this.routes({ 
     "/subset": function(){ 
      var items = MyModel.select(function(model){ 
       //Do a test on model 
       return (itemToBeReturned === true); 
      }); 
     } 
    }); 
    MyModel.fetch(); 
}, 

addAll: function() { 
    MyModel.each(this.proxy(this.addOne)); 
}, 

addOne: function (model){ 
    //Do some stuff with model 
} 

我想定義一個數,其獲取原始數據子集的路線。正如你所看到的,我現在沒有對我在路線中過濾的結果做任何事情。

是否有辦法讓fetch()只返回所有記錄的一個子集,以便刷新事件只接收這些記錄作爲參數?

回答

1

所以我會在回顧過去的幾個晚上並得出自己的結論之後,回答我認爲是正確的答案。希望它可以幫助某人。

這個問題真的歸結爲在數據到達刷新方法之前是否適合對數據進行過濾。抓取到達服務器並刷新接收這些記錄 - 除非您開始玩脊柱內部,否則這一點不會改變。

我基本上是問如何過濾數據客戶端。可能更好的是通過子集URL請求數據的子集,然後不必擔心如何減少我需要的數據。事實上,這可能是最明智的方法,因爲唯一的另一種方式(我現在可以看到)是通過讓默認提取發生,然後隱藏所有那些沒有出現在我的數據子集中的記錄。

0

我基本上在做類似的事情。這裏有什麼作品(我見過):

Model.extend({ 
    url: '/api/model', //whatever your endpoint is 
    filter: function(id) { //pass in whatever you want it to match 
     return this.select(function(c) { //c is the record it is checking 
      return c.id === id; //returns true and displays the record 
     }); 
    } 
}); 

var filteredItems = Model.filter(id); //filteredItems is a subset of the records. 
Controller.render(filteredItems); //pass them to your render function, or do whatever you want with them.