2012-09-01 4 views
0

백본에서 렌더링 할 때 리소스 준비가 필요합니다. 드롭 다운 목록을 만들려면 국가, 도시 및 우편 번호 목록이 될 수 있습니다. 적절한 함수가 무엇인지 궁금해서 렌더링 함수를 호출 할 때마다 리소스가 준비되었습니다.백본 렌더링 전 리소스 준비 완료

기본 렌더링 이벤트를 사용하고 있습니다. Jquery를 사용하여 이처럼 갈 수도 있습니다.

render: function(){ 
    var listofajaxcall = setupResource(); //returns array of ajax call 
    var self = this; 
    $.when(listofajaxcall){ 
    }.done(){ 
     self.rendering(); 
    } 
}, 
rendering: function(){ 
    //do something 
} 

답변

1

그 방법 중 하나는 일반적인 해결책입니다.

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에 가치가 있습니다. 왜냐하면 작업의 흐름이보다 명확하게 이루어지기 때문입니다.

+0

또 다른 옵션은보기가 불완전한 데이터를 렌더링 할만큼 똑똑하고 뭔가가로드되지 않은 경우 이벤트를 수신하고 준비가되었을 때보기의 전부 또는 일부를 다시 렌더링하는 것입니다. 이렇게하면 뷰가 자체 로더를 처리합니다. 당신이 AJAX 데이터의 몇 덩어리 이상을 기다리고있을 때 이것은 추악해진다. –

관련 문제