2013-10-14 93 views
0

我想知道是否有可能過濾模型,比如如何過濾集合?Backbone.js中的過濾模型(非收集)

我做了一個運動網站的搜索功能,我希望能夠通過過濾器類型的搜索結果,即足球,網球,籃球,游泳,田徑等..

這裏的我的代碼(檢查filterSearch()法):

define([ 
    'jquery', 
    'backbone', 
    'underscore', 
    'models/model'], 

    function($, Backbone, _, Model){ 

    var Search = Model.extend({ 

     urlRoot: '/search', 

     defaults: { 
      query: '' 
     }, 

     initialize: function(attrs, options) { 

      if (typeof options === 'object') { 
       this.router = options.router; 
      } 
     }, 

     filterSearch: function(type) { 
      this.filter(function(data) { 
       return data.get(type); 
      }); 
     } 

    }); 

    return Search; 
}); 

JSON:

[ 
    { 
     "search": [ 
      { 
       "result": { 
        "query": "Vettel is world champion" 
       }, 
       "type": "Formula 1", 
       "id": 1 
      }, 

      { 
       "result": { 
        "query": "Romario of Brazil world cup 1994" 
       }, 
       "type": "football", 
       "id": 2 
      }, 

      { 
       "result": { 
        "query": "federe won again" 
       }, 
       "type": "tennis", 
       "id": 3 
      } 


     ] 
    } 
] 
+1

你能提供一個JSON的例子來說明搜索api的結果是什麼樣的嗎?目前尚不清楚你將要過濾的是什麼。 – ne8il

+0

@ ne8il,感謝您的回覆。由於我工作的數據保護法律,我無法顯示我正在使用的json。但是我已經包含了一個類似和更簡單的版本,儘管... – Shaoz

+1

JSON看起來更像是一個集合而不是模型。爲什麼你沒有一個帶'parse'方法的集合來解開JSON的'search'部分? –

回答

2

是否有您使用的是型號爲這種情況下,而不是骨幹收集特定的原因是什麼?你可以很容易地對單個搜索結果的型號:

var searchResult = Backbone.Model.extend({}); 

和集合,表示搜索

var Search = Backbone.Collection.extend({ 
    model : searchResult, 
    urlRoot: '/search', 

    filterSearch: function(type) { 
     return this.where({'type' : type}); 
    }, 
    parse: function(response) { 
     return response.search; 
    } 

}); 

否則只是搜索模型所提供的陣列上:

..

filterSearch: function(type) { 
    return _.where(this.get('search'), {'type' : type}); 
} 
+0

感謝您的支持。使用Model而不是Collection的原因是因爲我沒有開始執行代碼,並且由於時間緊迫等原因會重構太多內容......我會嘗試您的解決方案,希望它應該是精細。 – Shaoz