jQuery不能使用RequireJS

时间:2016-01-21 12:05:43

标签: javascript jquery requirejs

我知道我的问题与此one非常相似,但我遇到了同样的问题,并且没有一个解决方案适合我。

我的目录结构如下:

static
    lib
        require.js
        jquery-1.11.3.js
        progressbar.js   
    client
        client.messages.js
        client.js
    main.js
    config.js

我的HTML文件是这样的:

<script src="{{ url_for('static', filename='scripts/lib/require.js') }}"></script>

<script>
    var require = {
        baseUrl: "/static/script",
        paths: {
        /* Load common libraries from CDN and fallback to local versions. */
        "jquery":      "lib/jquery-1.11.3.min.js",
        "progressbar": "lib/progressbar.min.js",
        "messages":    "client/client.messages.js"
        }
    };
</script>

<script src="{{ url_for('static', filename='scripts/main.js') }}"></script>

我还尝试在config.js文件中进行配置,如:

var require = {
        baseUrl: "/static/script",
    paths: {
        /* Load common libraries from CDN and fallback to local versions. */
        "jquery":      "lib/jquery-1.11.3.min.js",
        "progressbar": "lib/progressbar.min.js",
        "messages":    "client/client.messages.js"
    }
};

然后HTML文件就像:

<script src="{{ url_for('static', filename='scripts/config.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/lib/require.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/main.js') }}"></script>

在我的HTML文件中还有这一行:

<body onload="bodyLoaded()">

这个bodyLoaded()函数在我的main.js中:

var bodyLoaded = function () {
    //load scripts first
    var scripts = ['static/scripts/client/client.messages.js', 'static/scripts/client/client.js'];
    $.getScript(scripts[0], function () {
        $.getScript(scripts[1], function () {
            pluginCheck();
        });
    });
};

我得到的错误是:

  

未捕获的ReferenceError:$未定义

代表bodyload()中的这一行:

$.getScript(scripts[0], function () {

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

嗯......你正在加载RequireJS,你已经配置了它,但你没有使用它

获得所需内容的一种方法是:

var bodyLoaded = function () {
    //load scripts first
    var scripts = ['static/scripts/client/client.messages.js', 'static/scripts/client/client.js'];
    require(['jquery'], function ($) {
        $.getScript(scripts[0], function () {
            $.getScript(scripts[1], function () {
                pluginCheck();
            });
        });
     });
};

我添加了require(['jquery'], ...,以便实际加载jQuery。

这就是说,这很可能不是你想要结束的解决方案。首先,在我看来,client.messages.jsclient.js是加载RequireJS的候选者,所以,实际上,RequireJS应该配置为找到它们(我在配置中看到client.message.js但是不是client.js)。您很可能必须使用shim来定义它们之间的依赖关系。

我建议您仔细阅读RequireJS' documentation