2012-06-07 73 views
0

在我的應用程序中,我爲這些佈局提供了佈局和視圖。佈局僅在登錄/註銷時發生變化,但另一種特殊情況是在頁面加載中,我需要加載正確的佈局。然而,在我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

我想,在第一,但事實證明,佈局已經呈現,但認爲已經初始化之前** **,所以'el'是空的。 – Garrett

+0

啊,所以你在'requestInviteView'的'initialize'期間操作'betaLayout'的'el'?由於它看起來像是從所需文件中返回一個實例,請嘗試[order!插件](http://requirejs.org/docs/1.0/docs/download.html#order)(如果您使用的是RequireJS 1.0)來強制文件執行並按照正確的順序進行初始化。 否則,如果可能,操作代碼轉移到'requestInviteView'的'render',這樣,當它的執行,你可以明確控制。 – freejosh