2012-06-15 87 views
1

獲得Backbone.Marionette.Application我決定將web app分爲不同的Apps(app1,app2)。我應該如何使用requireJs

爲什麼從js/app1.js我得到undefined
我應該如何使用requirejs從app1訪問mainApp?

這裏是我的代碼:


的js/main.js

require([ 
    'js/app', 
    'js/app1/app1', 
    'js/app2/app2' 
], 
function (App) 
{ 
    "use strict"; 
    App.initialize(); 
}); 

JS/mainApp.js

define([''], 
function(app) 
{ 
    var mainApp = new Backbone.Marionette.Application(); 

    mainApp.start(); 

    mainApp.initialize = function() { 
     Backbone.history.start(); 
    } 

    return mainApp; 
}); 

JS/APP1/app1.js

define(['js/mainApp], 
function(app) 
{ 
    console.log(app); // undefined 
}); 

回答

1

隨着require.js,如果在需要的文件中的一個錯誤,有時不顯示爲錯誤,但返回的值變得未定義。在你的情況下,appjs/app1/app1.js未定義最有可能是由於js/mainApp.js中的錯誤。

從您提供的代碼中,js/mainApp.jsdefine語句帶有空字符串,但期望App被傳遞給它的函數。嘗試刪除空字符串,並將空列表([])傳遞給define,而不是將App傳遞給那裏的函數。

如果您的實際代碼沒有這些語法問題,但您仍然得到undefined,請更新您問題中的代碼片段。

試試這個:

JS/mainApp.js

define(['jquery', 'underscore', 'backbone', 'backbone.marionette'], 
function($, _, Backbone) 
{ 
    var mainApp = new Backbone.Marionette.Application(); 

    // Make sure main app is not undefined here. 
    console.log('mainApp:', mainApp); 

    mainApp.start(); 

    mainApp.initialize = function() { 
     Backbone.history.start(); 
    }; 

    return mainApp; 
}); 

不要忘了爲JS庫提供正確的路徑。

+0

+1謝謝你的時間。其實我很確定我的js文件沒有錯誤。我重寫了我的問題http://stackoverflow.com/questions/11070038/how-to-define-controller-router-and-app-in-the-right-order-using-requirejs。請看一下。 –