2012-07-22 4 views
0

나는 주로 (layout-component, layout, main view)처럼 구축 된 몇 가지 다른 뷰를 가지고있다.백본 : 싱글 톤 뷰?

다른보기로 전환 할 때 전체 페이지가 다시 렌더링되어야합니다.

적어도 "창"의 레이아웃보기를 캐싱하고 다시로드하는 것이 더 좋지 않습니까?

백본보기에는 단일 패턴과 같은 것이 있습니까?

어떻게하면됩니까? 간단합니다 :

window.MainLayoutView || window.MainLayoutView = new MainLayoutView({ el: 'div.main' }); 

충분합니까?

내가 생각해야 할 다른 것이 있습니까?

답변

2

예, 걱정할 것이 많습니다. 당신이 뭔가를 할 경우

window.MainLayoutView.render(); 
$(x).html(window.MainLayout.el); 
// And later... 
$(x).html(someOtherView.el); 
// And later still... 
$(x).html(window.MainLayout.el); 

당신이 window.MainLayout 내부의 모든 이벤트가 사라진 것을 확인할 수 있습니다. 인스턴스화 된 뷰를 캐시하고 내부 및 외부로 스왑하려는 경우호출을 정렬하여 모든 이벤트를 뷰 계층의 맨 아래로 리 바인드해야합니다.

이 두 예제의 동작을 비교하면 그 문제를 볼 수 있습니다 :

일반적으로보기를 캐시하려고하지 않고 단지 remove 개를 필요에 따라 다시 만들고 싶습니다.

+0

.append를 사용하면 이벤트 참조가 손실되지 않습니다. .html은 실제로 html을 문자열로 가져 오므로 실제로 뷰 엘레멘트를 참조하지는 않습니다. – Stephen

+0

@Stephen :하지만 그렇지 않습니다. 'empty '를 먼저하지 않으면 내용을 대체하기 위해'append'를 사용할 것입니다. 효과는 동일합니다 (http://jsfiddle.net/ambiguous/dcFDL/). 그리고 당신이'.html()'이 어떻게 작동하는지 혼란 스럽습니다 (http://jsfiddle.net/ambiguous/3ZJCq/). –