내 목표 다양한 뷰를 수신 할 수있는 사용자 레이아웃 (플로우 레이아웃)을 만들어야합니다. 영역을 필요에 따라 배치하고 전달되는 뷰를 표시하는 영역 내에서 뷰를 세로 또는 가로로 배열 할 수 있습니다.가변 개수의 뷰를 수용 할 수있는 레이아웃 만들기
요구 사항 레이아웃에는 초기에 영역이 정의되지 않은 템플릿이 있습니다. 추가 된 영역이 렌더링되는 래퍼 (data-role="region-wrapper"
) 만 포함합니다.
내 접근 방식.
1 -
2 Marionette.Layout
(분명히)를 확장 - 다음
constructor: function(options) {
// call super here...
this.viewList= options.viewList || [];
this._defineRegions(); // see 3
}
3처럼 생성자 Ovveride - 동적
_defineRegions: function() {
_.each(this.viewList, function(view, index) {
var name = 'flowRegion_' + index;
var definition = { selector: "[data-region='flow-region-" + index + "']" };
this.addRegion(name, definition);
}, this);
},
4 영역을 정의 - 영역 및 뷰를 렌더링 동일한 레이아웃 내의 onRender 메서드에서
onRender: function() {
_.each(this.viewList, function(view, index) {
// if the view has not been instantiated, instantiate it
// a region is a simple div element
var $regionEl = // creating a region element here based on the index
// append the region here
this.$el.find("[data-role='flow-wrapper']").append($regionEl);
var region = this.getRegion(index); // grab the correct region from this.regionManager
region.show(view);
}, this);
}
이 해결책은 효과가있는 것 같지만 유효한지 따라야하는지 알고 싶습니다. 따를 수있는 다른 접근법은 무엇입니까?
감사합니다. 서로 평등하지 않은 견해를 전달해야합니다. 따라서 사용자 정의 레이아웃. 또한 레이아웃 표시/닫기 기능을 활용하고 싶습니다. –
나는 아직도 팔리지 않았다. 위젯 목록은 사례와 유사 할 수 있습니다. 각 위젯은 서로 다르지만 여전히 더 나은 컬렉션입니다. show/close 하위보기는 모델을 제거하여 CollectionView에서도 깨끗하게 수행 할 수 있습니다. 여전히 그렇지 않은 경우이 설명을 잊어 버리십시오. –
나는지지를 표했다. 감사. 어쨌든 런타임 중에 영역을 추가 할 수 있다면 이유가있을 것입니다. 어쩌면 틀 렸지만 새로운 해결책을 모색하고 싶습니다. 왜 모델을 삭제하면 단일보기가 삭제됩니까? –