내 응용 프로그램에서 다소 깊을 수있는 중첩보기 설정이 있습니다. 하위 뷰를 초기화, 렌더링 및 추가하는 방법에는 여러 가지가 있지만 일반적인 관행이 무엇인지 궁금합니다.
내가 생각한 커플은 다음과 같습니다.
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
장점 : 추가로 올바른 DOM 순서를 유지하는 것에 대해 걱정할 필요가 없습니다. 뷰는 초기에 초기화되므로 렌더링 기능에서 한 번에 수행 할 작업이 많지 않습니다.
단점 : 비싼 이벤트 일 수있는 이벤트를 다시 위임해야합니까? 부모 뷰의 렌더 기능은 발생해야하는 모든 서브 뷰 렌더링으로 인해 복잡합니까? tagName
요소 를 설정할 수 없으므로 템플릿은 올바른 tagName을 유지해야합니다.
또 다른 방법:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
장점 : 이벤트를 다시 위임 할 필요가 없습니다. 빈 자리 표시 자만 포함하는 템플릿이 필요하지 않으며 tagName이 뷰에서 다시 정의됩니다.
단점 : 이제 올바른 순서로 항목을 추가해야합니다. 부모 뷰의 렌더링은 여전히 서브 뷰 렌더링에 의해 복잡해집니다.
onRender
이벤트 와 함께 :
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
장점 : 이제 서브 뷰 로직이 뷰의 render()
메소드 와 분리되었습니다 .
onRender
이벤트 와 함께 :
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
나는이 모든 예제에서 혼합되어 다양한 사례를 일치 시켰습니다 (죄송합니다)하지만 유지하거나 추가 할 것은 무엇입니까? 그리고 당신은 무엇을하지 않겠습니까?
사례 요약 :
initialize
또는에서 하위 뷰를 인스턴스화render
합니까?render
또는에서 모든 하위 뷰 렌더링 논리를 수행onRender
합니까?- 사용
setElement
또는append/appendTo
?
close
방법과 방법이 onClose
있지만 처음에 인스턴스화하고 렌더링하는 방법에 대해 궁금합니다.
delete
JS의 delete
C ++ 과 다릅니다 . 당신이 나에게 묻는다면 그것은 매우 가난한 키워드입니다.