我应该如何使用requireJs获取Backbone.Marionette.Application

时间:2012-06-15 16:17:35

标签: backbone.js requirejs marionette

我决定将web app分成不同的Apps(app1,app2)。

为什么来自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 个答案:

答案 0 :(得分:1)

使用require.js时,如果其中一个所需文件中存在错误,有时它不会显示为错误,但返回值将变为未定义。在您的情况下,app中的js/app1/app1.js未定义,很可能是由于js/mainApp.js中的错误。

仅从您提供的代码中,js/mainApp.js有一个带有空字符串的define语句,但希望将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库提供正确的路径。