2014-12-16 8 views
2

바닐라 Backbone 앱을 Backbone.Marionette 기반으로 다시 빌드하려고합니다. 그러나 기존 뷰 중 하나가 두통을 낳고 있는데, 이는 여러 하위 뷰를 모아 놓은 것입니다.Backbone.Marionette - 다른 ItemView 클래스가있는 CollectionView

예를 들어, 서버는 100 개의 항목, 50 개의 항목 유형, 49 개의 항목 유형 B 및 1 개의 C를 포함하는 목록을 반환합니다. 그런 다음 클라이언트 쪽에서 유형별로 그룹화되고 하나의 GroupView으로 렌더링됩니다. A 항목은 B 항목의 경우 GroupView이고 GroupView의 경우 EntryView 인 경우 개별 EntryView을 표시하도록 확장 될 수 있습니다.

2 개의 Group 모델 (내부에 각각 Entry 모델이 있음)과 Entry 모델이 포함 된 컬렉션을 만들 수 있습니다. 그러나 GroupView을 사용하여 Group 모델을 렌더링하고 Entry 모델을 EntryView 모델로 사용하도록 콜렉션 뷰에 알려주려면 어떻게해야합니까?

답변

4

부모 컬렉션의 각 모델에 사용할 자식 뷰 유형을 결정하려면 우선 을 재정의 할 수 있습니다.

var HeterogenousCollectionView = Marionette.CollectionView.extend({ 

    getChildView: function(model) { 
    if(model.isGroup()) { 
     return GroupView; 
    } else { 
     return EntryView; 
    } 
    } 

}) 

더 자세히 위해 Marionette docs를 참조하십시오

가정 당신의 Model 유형은 모델이 Group 또는 falsy 그렇지 않으면 인 경우 truthy 값을 반환 isGroup라는 방법이있다. 또한 annotated source code을 탐색하는 것이 좋습니다 - Marionette보기 유형의 작동 방식을 이해하는 데는 간결합니다.

+0

또한 'HeterogenousCollectionView'보다 더 자세한 설명 이름을 사용하는 것이 좋습니다. – joews

+0

감사합니다. 정확하게 내가 필요한 것. –

+1

이것은 100 % 정확하지만, Marionette v1에서는이 기능을'getItemView '라고 부릅니다. –

관련 문제