두 개의 템플릿이 있는데 하나는 부모 템플릿이고 다른 하나는 하위 뷰가있는 템플릿입니다. 첫 번째 상위 뷰는 백본의 뷰를 확장하고 렌더링 방법은 다음과 같습니다.다른 렌더링 메서드를 호출하여 백본에서 하위 뷰 렌더링
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() 내 단추 이벤트에서 렌더링 할 가져옵니다. 왜 여기에 차이점이 있습니까? 감사.
'this. $ el.append' 다음에 부모 뷰의'render'에서'this.populateView'를 호출하면 정확히 무슨 일이 발생합니까? 그 시점에서 myModel은 비어 있습니까? 부모의 render myModel이 비어 있다고 추측하고 있지만 버튼을 클릭하면 충분한 시간이지나 컬렉션이 채워집니다. –
@ PaulHoenecke 해당 시점에서 myModel이 비어 있지 않습니다. 나는 실제로 웹 서비스에 대해 이야기하는 것이 아닙니다. 웹 서비스와 대화하기 위해보기를 조롱하고 싶었습니다. 그래서 실제로는 더미 테스트 데이터를 만듭니다. 실제로 포함시키지 않은 데이터를 내 코드에 기록하고 모델 데이터가 모두 있습니다. – Crystal
그리고'myModel'은 어딘가에 정의되어 있습니까? 코드에서 전역 변수 또는 지역 변수와 같은 것으로 보이고보기의 속성이 아닌 것처럼 보입니다. 단추 클릭으로 작동한다고해서 문제가되지는 않을 것입니다. 나는 당신이 더 많은 코드를 보여야한다고 생각하고 문제를 일으키는 상태에 있다고 생각한다. –