2014-04-23 28 views
0

我建設,通過記錄過濾和查找具有在searchBy類別指定數目的任何實體的搜索框:Emberjs:分頁夾具數據

MyApp.SearchController = Em.ObjectController.extend({ 

searchTerm: "", 
searchBy: "id", 
searchFor: "customer", 
results: function(){ 
    if(this.get('searchTerm') !== ""){ 
     var searchObj = {}; 
     searchObj[this.get('searchBy')] = this.get('searchTerm'); 
     var that = this; 
     return this.store.all(this.get('searchFor')) 
     .filter(function(entity){ 
      return ('' + entity.get(that.get('searchBy'))).indexOf(that.get('searchTerm')) != -1; 
     }); 
    } else return []; 
}.property('searchTerm', 'searchBy', 'searchFor'), 
... 
}); 

但是有一個大的CPU峯值儘快當我點擊'1'時,它會過濾每個記錄並檢查每個ID。

有沒有限制過濾器的方法,以便它只返回前10場比賽?

回答

1

有幾件事你可以做,首先,應該在這裏使用節流/去抖動,http://emberjs.com/api/classes/Ember.run.html#method_debounce。下面是一個反擊的例子,開始輸入,直到你至少停止輸入500毫秒,它纔會開始搜索。 http://emberjs.jsbin.com/covovaye/2/edit

您不需要撥打all,然後filter,只需撥打filter併發送一個函數作爲過濾器。此外,您可以通過獲取searchBy和searchTerm來節省相當多的調用,然後反覆使用這些變量,而不是一遍又一遍地調用get。

results: function(){ 
    if(this.get('searchTerm') !== ""){ 
     var searchObj = {}, 
      searchBy = this.get('searchBy'), 
      searchTerm = this.get('searchTerm'); 
     searchObj[searchBy] = searchTerm; 
     var that = this; 
     return this.store.filter(this.get('searchFor'), function(entity){ 
      return ('' + entity.get(searchBy)).indexOf(searchTerm) != -1; 
     }); 
    } else return []; 
}.property('searchTerm', 'searchBy', 'searchFor') 

如果你真的想拿到第10,你可以使用slice

results: function(){ 
    if(this.get('searchTerm') !== ""){ 
     var searchObj = {}, 
      searchBy = this.get('searchBy'), 
      searchTerm = this.get('searchTerm'); 
     searchObj[searchBy] = searchTerm; 
     var that = this; 
     return this.store.all(this.get('searchFor')) 
            .toArray() 
            .slice(0,10) 
            .filter(function(entity){ 
      return ('' + entity.get(searchBy)).indexOf(searchTerm) != -1; 
     }); 
    } else return []; 
}.property('searchTerm', 'searchBy', 'searchFor') 
+0

這些都是偉大的祕訣,那你能不能包括樣本使用節流?該文檔對於像我這樣的JavaScript noob來說似乎相當困難。 – coderatchet

+0

完全,給我一秒鐘,我會鞭打一個 – Kingpin2k

+1

我添加了上面的例子與解釋。 – Kingpin2k