1

我决定将我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
});
4

1 回答 1

1

使用 require.js,如果所需文件之一有错误,有时它不会显示为错误但返回值变得未定义。在您的情况下,appinjs/app1/app1.js很可能是由于 in 中的错误而未定义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 库提供正确的路径。

于 2012-06-16T20:57:32.107 回答