5
require(['underscore'], function ($, _) {
  ...
});

不工作!(_不是函数)

如何管理它?

4

5 回答 5

7

请注意,underscore.js 不会将自己注册为 AMD 模块(尽管它在早期版本中只注册了一段时间),因此如果没有使用“shim:”进行一些配置,它就不能在 require() 调用中使用,就像这样:

require.config({
    paths: {
        jquery: 'lib/jquery.min',
        underscore: 'lib/underscore-min'
    }
    shim: {
        "underscore": {
            exports: "_"
        }
    }
});

请参阅以下文档:http ://requirejs.org/docs/api.html#config-shim

shim:添加到 require.js 之前,您可以使用插件 use.js 执行类似的操作(以防您需要使用较旧版本的 require.js)。

在撰写本文时,require.js 的当前版本是 2.1.8。

或者,您可以使用 lodash.js 作为 underscore.js 的替代 - 它确实将自己注册为 AMD 模块,因此您可以在没有额外配置的情况下使用它:http: //lodash.com/

于 2013-09-26T19:43:39.000 回答
2

我认为问题在于传入回调的参数的顺序。

应该:

require(['underscore'], function (_, $) {
 ...
});

您还需要使用添加了此功能的下划线版本 1.2.1。

于 2011-11-10T22:10:20.670 回答
0
require(["underscore"], function() { 
  console.log(_ === window._);
});
于 2011-09-24T15:21:55.820 回答
0

这一切都取决于脚本所在的位置。因为我没有看到您指定了 baseUrl,所以 baseUrl 将是默认值,这意味着,有两件事:

  1. 您的脚本直接位于 html 文件中,因此在您的情况下,它将在 html 文件的同一目录中查找 underscore.js
  2. 您的脚本位于您的 html 文件引用的 javascript 文件中,它现在将在您的自定义 javascript 文件的目录中搜索 underscore.js。

检查 underscore.js 是否真的存在。

于 2011-09-26T09:27:08.530 回答
0

以下是您的检查点,以确保您需要的工作正常

  1. 获取require-jquery.js并将其放入您的/js-root目录

  2. </body>在结束标记之前添加到您的 HTML :<script data-main="/js-root/main-js-file-name" src="/js-root/require-jquery.js"></script>

  3. 获取适用于 AMD 的下划线,并将其放入/js-rootdir 中

  4. main-js-file-name.js

写:

require(["jquery", "underscore"], function ($, _) {
    ...
});

同样,在您的非主 AMD JS 文件中,当定义一个模块时,要使用_,编写:

define(["jquery", "underscore"], function ($, _) {
    ...
    return theModuleObjectOrFunction;
});
于 2012-09-09T05:16:08.397 回答