2012-06-07 7 views
0

내 응용 프로그램에서 나는 그 레이아웃에 대한 레이아웃과보기가 있습니다. 레이아웃은 로그인/로그 아웃시에만 변경되지만 다른 특별한 경우는 pageload에 있습니다. 적절한 레이아웃을로드해야합니다. 그러나 내 defaultAction에서 내 레이아웃은 실제로 반환하지 않으므로 렌더가 렌더링하려고 시도 할 때 el이 포함되어 있다고 가정합니다.백본보기 순서대로 렌더링되지 않습니다

// Filename: router.js 
var app_router; 
define([ 'views/layouts/beta', 'views/beta/requestInvite', 'views/beta/login', 'views/app/dashboard' ], 
function(betaLayout, requestInviteView, loginView, dashboardView) { 
    var AppRouter = Backbone.Router.extend({ 
     routes : { 
      // Pages 
      'login' : 'login', 
      'dashboard' : 'dashboard', 

      // Default 
      '*actions' : 'defaultAction' 
     }, 

     // Pages 
     login : function() { 
      loginView.render(); 
     }, 

     dashboard : function() { 
      dashboardView.render(); 
     }, 

     // Default 
     defaultAction : function(actions) { 
      betaLayout.render(); 
      requestInviteView.render(); 
     } 
    }); 

    var initialize = function() { 
     app_router = new AppRouter; 

     $('a').live('click', function() { 
      var href = $(this).attr('href'); 

      // only navigate to real links 
      if(href == undefined) 
       return; 

      app_router.navigate(href, {trigger: true}); 

      return false; 
     }); 

     Backbone.history.start({pushState: true}); 
    }; 
    return { 
     initialize : initialize 
    }; 
}); 

보기 전에 내 레이아웃을 완전히 렌더링 할 수 있습니까?

답변

0

문제는 내보기가 초기화되기 전에 내 레이아웃 렌더링하지 않았다 때문에 el가 비어있는 것이 었습니다. 내가 한 모든 객체는 인스턴스 대신 개체를 반환하고 초기화 된 후에는 render으로 설정했습니다. 이렇게하면 new MyLayout을 선언하고 new MyView을 선언하면 MyViewel이 유효하다는 것을 알 수 있습니다.

1

betaLayout.render()에 대한 콜백을 인수로 지정하여 렌더링이 실제로 완료 될 때 실행되도록합니다. 일예로

, betaLayout.render() 같은 것을 보일 것이다 :

render: function(callback) { 
    /* code to render your element, 
     using the following line when all 
     asynchronous calls are complete */ 
    if (callback) callback(); 
} 

을하고 defaultAction는 콜백으로 두 번째 render()을 통과, 그래서처럼 사용할 수 있습니다.

betaLayout.render(requestInviteView.render); 
+0

처음에 시도했지만 레이아웃이 이미 렌더링 된 것으로 나타났습니다.보기가 ** 전에 ** 초기화 되었기 때문에 '엘'이 비어있었습니다. – Garrett

+0

아, 그럼'requestInviteView'의'initialize' 중에'betaLayout'의'el'을 조작하고 있습니까? 필요한 파일에서 인스턴스를 반환하는 것처럼 보이므로 [주문! plugin] (http://requirejs.org/docs/1.0/docs/download.html#order) (RequireJS 1.0을 사용하는 경우) 파일을 강제로 실행하고 올바른 순서로 초기화해야합니다. 그렇지 않은 경우, 조작 코드를'requestInviteView'의'render'로 옮기십시오. 그러면 실행 시점을 명시 적으로 제어 할 수 있습니다. – freejosh

관련 문제