이 용이해야한다 :
이 내가 내 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을 가져온 다음 필요한 모든 데이터로 원본을 확장 할 수 있습니다. 원래 모델은 수정되지 않지만 항목보기에서 사용중인 모델에는 필요한 데이터가 있습니다.
HTML/CSS 문제 또는 JavaScript 문제가 있는지 여부는 분명하지 않습니다. 질문을 수정하고 JS/백본의 관련 스 니펫을 게시하십시오. 당신이하는 경우에 당신은 훨씬 더 나은 답변을 얻을거야. 코드가 너무 길거나 심층적 인 게시물 미리보기를 가져오고 또한 바이올린을 만드는 경우. – EBarr
나는 이것을 – Guy