2014-01-23 2 views
0

웹 페이지가로드 되 자마자로드되는 백본보기를 정의하는 코드가 있습니다. 자바 스크립트는 DOM이 완전히로드되기 전에 실행될 수 있습니다. 뷰를 정의하는 코드가 실행될 때 $ el이되는 dom 요소를 사용할 수 없다면 문제가 발생합니까?백본보기를 정의 할 때 뷰 요소를 DOM에로드해야합니까?

프로그래밍은이 같은 뭔가를 :

약간의 시간이 지금보다 렌더링 볼 수있는 // 전화를 통과 //
var view = Backbone.View.extend({ 
     el: jQuery("#test") 

    events: { 
    } 
    render: function() { 
     this.$el.html(); 
    } 

    //other view code 

}); 

return view; 

:

view.render() 

문제는 방법을 렌더링 할 때이다 $ el은 정의되지 않았습니다. 첫 번째 코드 블록이 #test가 DOM에로드되지 않았을 때 실행 되었기 때문입니다. 그래서; Backbone.View.extend 함수가 호출되면 'el'요소가로드되어야합니까?

이 컨텍스트는 AMD를 통해로드 된 백본 응용 프로그램입니다. 첫 번째 코드 블록은 모듈에 있습니다. 모듈은 DOM이로드되기 전에 '필수'입니다. 이것은 일반적인 문제입니까? 어떻게 정상적으로 처리됩니까?

감사

답변

0

엘은 jQuery를 객체 만 선택기 안, $ 엘은 그 선택에 대한 jQuery 오브젝트 될 것입니다. 또한 el로 지정하는 ID는 초기화 할 때 찾아야합니다. 그래서 네, 당신은보기에 엘을 만들기 전에 엘리먼트가 dom에 있어야합니다.

만들려하지 않는 경우/그것을 백본을하기 전에보기를 채우는는 백본 당신을 위해 HTML 태그 등을 작성하려면이 같은 일을 할 수있는보기 :

var view = Backbone.View.extend({ 
    tagName: 'div', 
    id: 'test', 

    events: { 
    }, 

    render: function() { 
     this.$el.html(); 
    }, 

    //other view code 

}); 

을 그런 다음 템플릿을 사용할 수 있습니다 렌더링 함수에서 뷰를 채 웁니다.

짧은 대답 : 예,보기를 초기화 할 때보기 요소를 DOM에로드해야합니다.

+0

감사합니다. 그건 좀 더 명확 해. 또한 생성자에 전달하여 설정할 수 있음을 알았습니다. var view = new View ({el : $ ("# search_container")}); 그러나. 다시; 요소가 있어야합니다. –

관련 문제