2013-10-22 2 views
1

사용자가 컬렉션에서 displayNames 및 전자 메일을 검색 할 수있게하려고합니다.백본 Marionette 컬렉션 필터링

지금까지 전체 합성보기는 아래 코드와 같습니다. 이 렌더링 및 내 var 검색을 기록하지만 collection.where 및 새 Backbone.Collection 후 렌더링을 호출하는 방법을 잘 모르겠습니다?

define(["marionette", "text!app/templates/bamboo/employees/collection.html", "app/collections/bamboo/employees", 
    "app/views/bamboo/employees/item", "jquery"], 
    function(Marionette, Template, Collection, Row, $) { 
    "use strict" 
    return Backbone.Marionette.CompositeView.extend({ 
     template: Template, 
     itemView: Row, 
     itemViewContainer: "ul", 
     collectionEvents: { 
     'sync': 'hideLoading' 
     }, 
     events: { 
     'keyup #filter-input': 'initialize' 
     }, 
     initialize: function() { 
     var search = $('#filter-input').val() 

     if (typeof(search) != "undefined") { 
      console.log(search) 
      var filtered = //somehow search collection displayName and email by value search 
      this.collection = new Backbone.Collection(filtered); 
     } else { 
      this.showLoading() 
      this.collection = new Collection() 
      return this.collection.fetch() 
     } 
     }, 
     showLoading: function() { 
     this.$el.addClass('loading') 
     }, 
     hideLoading: function() { 
     this.$el.removeClass('loading') 
     } 
    }) 
}) 

답변

2

당신은 MarionetteCollectionViewview.children._viewsCompositeView에서보기를 얻을 수 있습니다. 같은 코드로

:

_.each(colView.children._views,function(v){ 
    if(!condition){ 
    v.$el.hide(); 
    } 
}); 

당신이 (v.model.get('type') == 'todo' 수 귀하의 경우 조건에서) 조건을하지 않은 colView에서보기를 숨길 수 있습니다.

+0

에 대한

return Backbone.Marionette.CompositeView.extend({ template: Template, itemView: Row, itemViewContainer: "ul", events: { 'keyup #filter-input': 'filter' }, initialize: function() { this.filter(); }, filter: function() { var search = $('#filter-input').val() || ''; this.collection.invoke('set', 'filter', search); }, // ... }); 

다음

는 내 질문에 편집. collection.where는 정확하지 않습니다. – azz0r

1

컬렉션의 단일 인스턴스 만 인스턴스화하고 모델에서 함수를 호출하면이 작업이 더 쉬울 수도 있다고 생각합니다. 당신의 itemViews

Row = Backbone.Marionette.ItemView.extend({ 
    modelEvents: { 
     "change filter": "filter" 
    }, 
    filter: function(model, search) { 
     if (model.shouldBeShown(search)) { 
      this.$el.show(); 
     } else { 
      this.$el.hide(); 
     } 
    } 
}); 
+0

이 아이디어를 좋아해서 감사합니다. – azz0r

+0

위와 관련된 문제가 있습니다. http://jsfiddle.net/ysuMZ/1/ – azz0r

+0

문제가 무엇인지 잘 모릅니다. 실행중인 바이올린을 제공 할 수 있습니까? http://jsfiddle.net/ysuMZ/2/에 오류가 발생하지 않지만 실행하기에 충분한 정보가 없습니다. – Justin