2012-01-27 79 views
0

我有兩個主幹視圖。一個是主視圖,另一個是在主視圖中使用的視圖。我爲我的各種觀點製作單獨的模塊。我有主視圖正在加載,並從路由器運行良好。這裏是我的兩個觀點:Backbone.js + require.js應用程序:未返回加載了require.js的模塊視圖

主視圖:

define([ 
    'jquery', 
    'backbone', 
    'metros/docsMetro' 
], 
function($, Backbone, docsMetro) { 
    //Main Dashboard View 
    var Dashboard = Backbone.View.extend({ 
      el: $('#mainContent'), 
      events: { 

      }, 


      initialize: function() { 
       console.log('test'); 
       //Validate User Here most likely. Each of the main view's for each app should probably call the same validation function 


      }, 

      render: function(){ 
       console.log('testing render'); 

      } 

     }); 


    // Return the Main Dashboard View 
    return new Dashboard; 

的「地鐵/ docsMetro」與頂部需要有正在被加載的文件。我可以看到這個視圖正在加載並正在運行init。

define([ 
    'jquery', 
    'backbone' 
], 
function($, Backbone) { 
    //Docs Metro View 
    var docsMetro = Backbone.View.extend({ 
      el: $('.docs'), 
      events: {}, 

      initialize: function() { 
       console.log('docs Metro'); 

      }, 

      render: function(){ 
       console.log('redering docs'); 

      } 

     }); 

    // Return the View 
    return new docsMetro; 
}); 

我的問題是在主視圖中應返回的docsMetro視圖回來空的「docsMetro」變量。

我錯過了什麼,好像它是所有設置都正確?

+0

我重新創建了你的例子,並且我能夠使它工作。我在控制檯視圖中看到2個可能的問題。第一是正確引用'metros/docsMetro''。在儀表板視圖中是第二個,最後缺少'})',但這可能只是一個錯字。我注意到,當我在視圖的末尾丟失'''時出現了問題。 – 2012-01-27 22:03:55

+1

我在這裏添加了我的確切代碼:https://gist.github.com/1691229。在我的main.js中,我確實使用了require.config來映射路徑。 – 2012-01-27 22:18:46

回答

0

你可以嘗試設置模塊的路徑是相對的嗎?

而不是做'metros/docsMetro''./metros/docsMetro'(假設地鐵文件夾是在同一級別爲需要從中地鐵模塊文件/ docsMetro)

併爲您的代碼一些其他的技巧和修正。

模塊應該返回構造函數而不是實例,並且您應該在初始化器中爲需要它們的視圖實例化它們。

jQuery和Backbone不會放棄全局註冊其名稱空間的支持,因此您不必每次都將它們傳遞給依賴項數組。如果你在加載你的路由器和主視圖之前需要他們一次就足夠了,這將負責加載應用的其餘部分。

相關問題