그 방법 중 하나는 일반적인 해결책입니다.
setupResource
호출에서 약속을 반환하면 자원 준비가 완료 될 때까지 뷰 렌더링이 지연 될 수 있습니다. 뷰를 렌더링 할 때 당신이 추가로 수행 할 수 있습니다
한 가지 말을 당신의 rendering
방법에서 이벤트를 트리거입니다 :
render: function(){
var listofajaxcall = setupResource(); //returns array of ajax call
var self = this;
$.when(listofajaxcall){
}.done(){
self.rendering();
}
},
rendering: function(){
//do something
// after it's done...
this.trigger("rendered");
}
그 방법을, 당신은 렌더링 이벤트 및 호출을들을 수 있습니다 뷰가 렌더링 된 후에 실행해야하는 추가 코드.
내가 선호하는 다른 방법은보기 외부에서 코드를 설정하여보기가 비동기 코드를 처리 할 필요가 없도록하는 것입니다.
var foo = {
bar: function(){
var listofajaxcall = setupResource();
var self = this;
$.when(listofajaxcall).then(someResource){
var view = new MyView({
someResource: someResource
});
view.render();
$("#whatever").html(view.el);
}
}
}
foo.bar();
이 버전의 코드에서는보기가 비동기적인 것에 대해 아무것도 모릅니다. 그것에 대해 알고있는 앱의 로직 흐름을 제어하는 코드입니다. 단점은 화면에 "로드 중 ..."메시지를 넣으려면 먼저 다른보기를 렌더링해야한다는 것입니다. 이것은 IMO에 가치가 있습니다. 왜냐하면 작업의 흐름이보다 명확하게 이루어지기 때문입니다.
또 다른 옵션은보기가 불완전한 데이터를 렌더링 할만큼 똑똑하고 뭔가가로드되지 않은 경우 이벤트를 수신하고 준비가되었을 때보기의 전부 또는 일부를 다시 렌더링하는 것입니다. 이렇게하면 뷰가 자체 로더를 처리합니다. 당신이 AJAX 데이터의 몇 덩어리 이상을 기다리고있을 때 이것은 추악해진다. –