2013-04-03 3 views
0

두 개의 템플릿이 있는데 하나는 부모 템플릿이고 다른 하나는 하위 뷰가있는 템플릿입니다. 첫 번째 상위 뷰는 백본의 뷰를 확장하고 렌더링 방법은 다음과 같습니다.다른 렌더링 메서드를 호출하여 백본에서 하위 뷰 렌더링

render: function() { 
    this.$el.append(templates["template-parent-test"](this.model)); 
    return this; 
} 

이 상위 뷰에는 버튼이 있습니다. 바로 버튼을 사용하여 내보기를 채 웁니다. 그것은 기본적으로이 작업을 수행합니다

populateView: function() { 
    // create some dummy test data to match the web service 
    _.each(myModel, function (theModel) { 
     var testView = new childView({ model: theModel }); 
     this.$('div-in-parent-view').append(testView.render().$el); 
    }); 
    } 

이 백본보기는 Backbone.View 확장과 같은 그 방법을 렌더링 보이는 :

render: function() { 
     console.log("rendering child view"); 
     this.$el.html(this.template({ data: this.model.toJSON() })); 

     return this; 
    } 

그래서이 작동합니다. 그러나 단추 누르기에 대한 부모보기를 채우고 싶지 않습니다. 나는 그것을 처음으로 보여줄 때 그것을 채우고 버튼이 실제로 그것을하기로되어있는 것을하게하려고합니다. 나는 단지 this.populateView()를 부모 뷰의 내 렌더링 함수에서 호출 할 수 있다고 생각하지만 실제로 렌더링 된 것은 아무것도 없다. 그러나 만약 내가 this.populateView() 내 단추 이벤트에서 렌더링 할 가져옵니다. 왜 여기에 차이점이 있습니까? 감사.

+0

'this. $ el.append' 다음에 부모 뷰의'render'에서'this.populateView'를 호출하면 정확히 무슨 일이 발생합니까? 그 시점에서 myModel은 비어 있습니까? 부모의 render myModel이 비어 있다고 추측하고 있지만 버튼을 클릭하면 충분한 시간이지나 컬렉션이 채워집니다. –

+0

@ PaulHoenecke 해당 시점에서 myModel이 비어 있지 않습니다. 나는 실제로 웹 서비스에 대해 이야기하는 것이 아닙니다. 웹 서비스와 대화하기 위해보기를 조롱하고 싶었습니다. 그래서 실제로는 더미 테스트 데이터를 만듭니다. 실제로 포함시키지 않은 데이터를 내 코드에 기록하고 모델 데이터가 모두 있습니다. – Crystal

+0

그리고'myModel'은 어딘가에 정의되어 있습니까? 코드에서 전역 변수 또는 지역 변수와 같은 것으로 보이고보기의 속성이 아닌 것처럼 보입니다. 단추 클릭으로 작동한다고해서 문제가되지는 않을 것입니다. 나는 당신이 더 많은 코드를 보여야한다고 생각하고 문제를 일으키는 상태에 있다고 생각한다. –

답변

0

thisthird parameter to each으로 추가하십시오. 그것은 문맥을 설정합니다. 컨텍스트를 지정하지 않으면 thiswindow이됩니다. 그리고 html이 부모보기의 render 동안 아직 페이지에 없기 때문에 html을 추가하려면 this.$('#div-in-parent-view')을 찾지 못할 것입니다.

+0

고마워요! 어떻게이 물건을 그렇게 잘 안다?!?!?!?!?! 하하. 다시 한 번 감사드립니다! – Crystal