1

因为我需要来自服务器端的重要设置,所以我需要将主文件放在 HTML 文件中。但我现在的问题是别名文件仍然加载,但不能作为变量使用。(也不在 app.js 文件或其他定义的文件中。)所以当我这样做时:(见 HTML 页面的底部)

require([
  'jquery'
   'app'
], function($, App) {
   alert($);
   App.initialize();
});

警报将显示一个未定义的变量,但是当我查看加载的文件时。jQuery 文件已加载。(下划线和主干变量也有同样的问题,但 app 变量没有,只有别名有问题。)你知道如何解决这个问题吗?

<html>
<head>
<title>Domain.net</title>

<link rel="stylesheet" href="css/reset.css" />
<link rel="stylesheet" href="css/style.css" />
<script src="js/lib/modernizr.js"></script>

<script src="js/lib/require.js"></script>
<script type="text/javascript">
// Require.js allows us to configure shortcut alias
require.config({
    baseUrl: "js",
    paths: {
        jquery: 'lib/jquery',
        underscore: 'lib/underscore',
        backbone: 'lib/backbone',
        templates: '../templates'
    }
});

define('config', function() {
    return {
        /** My serverside config */
    }
});

//Load the App
require([
    'jquery',
    'app'
], function($, App) {
    alert($);
    App.initialize();
});
</script>

4

1 回答 1

1

我不确定您使用的是什么版本的 jQuery,但如果不是 1.7 或更高版本,则默认情况下将不支持 amd,这可以解释您为什么会得到undefined. 在这种情况下,最好的解决方案是更新它。

或者,尝试在您的配置中添加一个shim :exports: jQuery

require.config({
    baseUrl: "js",
    paths: {
        jquery: 'lib/jquery',
        underscore: 'lib/underscore',
        backbone: 'lib/backbone',
        templates: '../templates'
    },
    shim: {
        jquery: {
            exports: 'jQuery'
        }
    }
});

另请注意,您设置服务器端配置的方式容易出现竞争条件,请参阅此答案

于 2012-11-15T22:42:00.083 回答