2012-08-12 3 views
2

난 LI itemView를 사용하여 UL을 만드는 collectionView가 있습니다.BackboneJS * 행렬 * collectionView에서 행을 어떻게 인쇄 할 수 있습니까?

밑줄 템플릿에서 항목 색인 번호 (개수)를 사용하고 싶습니다. 즉 :

hello (item 0) 
world (item 1) 

누구도 어떻게 집계에서 카운트를 사용하는지 압니까? 나는 그것을 모델에 넣는 것을 피하고 싶다. ,

<script id="task-template" type="text/html"> 
      <div class="order"><%=n%></div> 
      <div class="title-container"> 
       <a href="#">...</a> 
      </div> 
</script> 

감사 도움,

환호,

+0

HTML/CSS 문제 또는 JavaScript 문제가 있는지 여부는 분명하지 않습니다. 질문을 수정하고 JS/백본의 관련 스 니펫을 게시하십시오. 당신이하는 경우에 당신은 훨씬 더 나은 답변을 얻을거야. 코드가 너무 길거나 심층적 인 게시물 미리보기를 가져오고 또한 바이올린을 만드는 경우. – EBarr

+0

나는 이것을 – Guy

답변

3

이 용이해야한다 :

이 내가 내 itemView 템플릿 (항목 수로 N과) 같이하고 싶은 것입니다 컬렉션의 모델로서 필요한 정보를 쉽게 얻을 수 있습니다. 원하는 추가 정보를 얻을 수 있도록 모델 주위에 "보기 모델"래퍼를 만들어야합니다.


var createViewModel(model){ 

    // inherit from the original model 
    var vm = Object.create(model); 

    // override the original `toJSON` method 
    vm.toJSON = function(){ 
    var json = model.toJSON(); 

    // add the index 
    json.index = model.collection.indexOf(model); 

    return json; 
    } 

    return vm; 
} 

이 뷰 모델은 itemView에서 직접 사용됩니다.


MyItemView = Backbone.Marionette.ItemView.extend({ 
    template: "#my-item-view-template", 

    initialize: function(){ 

    // replace the model with the the view model 
    this.model = createViewModel(this.model); 

    } 
}); 

MyCollectionView = Backbone.Marionette.CollectionView({ 
    itemView: MyItemView 
}); 

그리고 그게 전부입니다.

컬렉션을 MyCollectionView 생성자에 전달하고 컬렉션보기를 렌더링하면 itemView가 인스턴스화 될 때 각 itemView 인스턴스에 대해 새보기 모델이 만들어집니다. 템플리트는 모델에서 index을 이제 렌더링 할 수 있습니다.

뷰 모델은 원래 모델을 직접 상속하므로 모든 메서드와 특성을 계속 사용할 수 있습니다. toJSON 메서드를 재정의하면 원본 모델에서 원본 json을 가져온 다음 필요한 모든 데이터로 원본을 확장 할 수 있습니다. 원래 모델은 수정되지 않지만 항목보기에서 사용중인 모델에는 필요한 데이터가 있습니다.

+0

과 함께 분류 할 수 있습니까? itemview가 새 위치에서 다시 렌더링 될 때 인덱스가 변경되는지 여부를 생각하고 있습니다. – Guy

+0

해야합니다. 항목보기가 다시 렌더링 될 때마다보기 모델에서'toJSON'을 다시 호출하여 모델의 현재 색인을 가져옵니다. –

+0

cool. Derrick. 훌륭한 도서관. – Guy

9

나는 쉬운 방법을 찾았습니다. (Marionette v1.0.0-rc6 포함)

templateHelpers 속성을 사용합니다. 당신의 품목보기에서

: 전부

<%= index %> 

: 템플릿에

MyItemView = Backbone.Marionette.ItemView.extend({ 
    template: "#my-item-view-template", 

    templateHelpers: function(){ 

     var modelIndex = this.model.collection.indexOf(this.model); 
     return { 
      index: modelIndex 
     } 

    } 
}); 

당신과 함께 인덱스를 인쇄 할 수 있습니다.

+0

이 솔루션이 더 적합 해 보입니다. – GirishK

관련 문제