2013-10-21 4 views
0

초기화 할 때 socket.io를 통해 모델 데이터를 가져 오는 모듈이있는 Backbone.Marionette 앱이 있습니다. 나는이와 라우터를 시작데이터 가져 오기 후 라우터 시작

App.on('initialize:after', function(){ 
    Backbone.history.start(); 
}); 

문제는 데이터가 반입되기 전에 라우터가 시작하고 나의보기를 렌더링하지 않습니다.

페이지로드시 모델을 가져온 후에 내보기가 표시되도록하려면 어떻게해야합니까?

답변

0

귀하의 질문은 라우터 관련이있을 것 같지 않습니다. 라우터는 단순히 URL을 구문 분석하여 적절한 조치를 호출합니다. 뷰가 렌더링되지 않으면 응용 프로그램이 컨트롤러 작업을 제대로 호출하지 않는다는 의미입니다.

라우터 상태에 관계없이보기 내에서 데이터를 기다려야합니다. 이를 수행하는 한 가지 편리한 방법은 jQuery 지연을 사용하는 것입니다. 당신이 할 수있는 내 블로그 게시물의 일부에 그들에 대해 읽

또한, 당신은 여기에서 사용을 볼 수 https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/show/show_controller.js이 코드는 내 book on Marionette 및 용도에서 가져옵니다 데이터가 "가져 오기"되는 동안로드 뷰를 표시하는 지연/약속.

0

제거

Backbone.history.start(); 
여기에서

및 가져 오기의 성공 콜백에 넣어.

언제든지 라우터를 초기화 할 수 있지만 실제로는 이 리다이렉션을 수행합니다. 여러 페치의

업데이트

검출 성공 :

//Declare an array 
App.modules = []; 

//When you initialise each module, push it to array 
App.modules.push(this.id); 

//Declare a counter for modules 
App.moduleCounter = 0; 

var startHistory = function() { 
    App.moduleCounter++;   

    if(App.modules.length === App.moduleCounter) { 
      Backbone.history.start(); 
     }  
} 

//Call this function on each success 
startHistory(); 
+0

문제는 다른 데이터를 가져 오는 여러 모듈이 있다는 것입니다. 나는 각 Success 콜백에'Backbone.history.start()'를 넣을 수 없다. 나는 앱 레벨에서 그것을 유지하고 싶다. –

+0

정말 모든 것이 어떻게 구조화되어 있는가에 달려있다. 각 가져 오기 성공을 감지하고이를 호출 할 수 있습니다. –

+0

Ok, 응용 프로그램에서 각 모듈의 성공 가져 오기를 어떻게 검색합니까? –

관련 문제