2012-12-07 5 views
1

백본을 사용하는 단일 웹 페이지 앱을 만들고 있는데 문제가 있습니다. 내 마스터보기는 URL을 기반으로하는 내 페이지의 본문 부분을 대체 할 템플릿에 따라 다르지만, "el "그 견해로 볼 때, 나는 그것을"렌더링 "또는"초기화 "방법으로 DOM에 삽입 할 템플릿 자체가되고 싶었습니다.아직 작성되지 않은 백본을 사용하고 있습니까?

하지만 새로운 MyMasterView를 호출하면 인스턴스화시 DOM에 존재하지 않으므로 el은 정의되지 않습니다.

어떻게하면됩니까?

내가 찾은 유일한 수정점은 콘텐츠를 대체 할 기존 DOM에 el을 설정하고 렌더링에서 .remove(). append (the_template)를 호출하는 것이지만 가장 좋은 방법은 아닌지 잘 모르겠습니다. .

도움 주셔서 감사합니다.

+0

예제 코드가 있습니까? – jcreamer898

답변

3

우리는 당신이 사업부 당신이보기에 의해 생성 된 HTML을 삽입하고 싶어 다른 요소가 될 수있는 DOM

<div id="existing"> 

</div> 

에 다음 DIV이 시나리오를 고려할 수 있습니다. 당신은 DIV 년에 이미 같은 뷰에 대한 elexisting을 지정할 수 있습니다

<div id="inside_template"> 
    <!-- content of the template goes here --> 
</div> 

, 당신은 템플릿 다음 한

가정하자. 유일한 문제는 body 또는 그와 같은 태그가있는 경우 메모리 누수를 방지하기 위해보기를 지우는 동안보기에서 제거하면 원하는 것이 아닌 dom에서 태그가 삭제됩니다.

이에 대한 해결책이 수행 할 작업을

render : function() { 
    this.$el.html(this.template()); 
    this.setElement("#inside_template"); 

    // another render method content 
} 

는, 그 호출 setElement 직후 같은 DOM에 템플릿 HTML을 추가 한 후, elexisting을 지정하는 것이 el에서보기의 HTML을 렌더링하고, 수 보기의 elexisting (또는 다른 DOM 요소)에서 inside_template으로 변경됩니다. 따라서 el을 제거하는 동안 inside_template 요소가 제거되고 existing 요소가 그대로 DOM에 유지됩니다.

+0

얼마나 좋은가! 나는 setElement에 대해 몰랐다! 고맙습니다! :) –

+0

도움이 된 것을 기쁘게 생각합니다. :) – Cyclone

0

el을 null로 남겨두고 tagName으로 설정하려고 했습니까? 그렇게하면 _ensureElement은 뷰의 요소에 대한 새로운 분리 DOM 노드를 만듭니다. 페이지의 DOM에서 분리 된 DOM 조각을 렌더링 할 수 있어야하고 외부 코드는 append 또는 jQuery의 replaceWith과 같은 것을 사용하여 해당 요소를 제자리에 배치 할 수 있어야합니다.

관련 문제