2013-10-14 3 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

검색 API의 결과가 어떻게 나타나는지 JSON 예제를 제공 할 수 있습니까? 필터링하려는 대상이 무엇인지 명확하지 않습니다. – ne8il

+0

@ ne8il, 응답 해 주셔서 감사합니다. 내가 일하는 데이터 보호법 때문에, 나는 함께 일하고있는 json을 보여줄 수 없다. 그러나 내가 만든 비슷하고 간단한 버전을 포함 시켰습니다. – Shaoz

+1

JSON은 모델보다 컬렉션처럼 보입니다. JSON의'search' 부분을 푸는'parse' 메쏘드를 가진 콜렉션을 가지고 있지 않습니까? –

답변

2

이 경우보다는 백본 컬렉션에 대한 모델을 사용하는 특별한 이유가 있나요? 그렇지 않으면 그냥 모델에서 제공되는 배열을 통해 검색 검색을

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

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

}); 

을 대표하는

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

과 모음 : 당신은 쉽게 하나의 검색 결과에 대한 모델을 가질 수

..

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

감사합니다. Collection 대신 Model을 사용하는 이유는 처음부터 코드를 작성하지 않았기 때문입니다. 마감 시간이 너무 짧아서 리팩터링하기에는 너무 어려울 것입니다. 솔루션을 시도해보고 잘해야합니다. 벌금. – Shaoz

관련 문제