2
require.config({
     paths: {
         jquery: 'libs/jquery',
         underscore: 'libs/underscore',
    }
});
define([
    'jquery',
    'underscore',
    ], function($,_){
        var test = _.template("hello: <%= name %>",{name:"warren"});

});

鉴于上述代码使用 requirejs 加载 jquery 和下划线,为什么我会收到此错误...

Uncaught TypeError: Cannot call method 'template' of null

所有 JS 似乎都在加载...错误指向 _.template 行。这真让我抓狂...

4

1 回答 1

7

你确定你已经捆绑了下划线库以便与 requireJS 一起使用吗?

当你写:

define([
    'jquery',
    'underscore',
  ], function($,_){
      var test = _.template("hello: <%= name %>",{name:"warren"});

});

'_' 变量(回调函数的第二个参数)分配有下划线库的导出(指定的第二个依赖项)。

我猜你使用了原始版本的下划线,它不是 requireJS 的包。在您的 underscore.js 文件中,在开头添加以下行:

define(function () {

最后这一行:

return _;});

因此,导出配置良好。

另一种可能的解决方案是使用全局“_”变量:您需要做的就是删除回调的第二个参数。

define([
    'jquery',
    'underscore',
  ], function(){
      var test = _.template("hello: <%= name %>",{name:"warren"});

});

从那里,您的浏览器将使用“_”全局变量,该变量在下划线中定义,并在调用回调时设置。

jQuery 也有同样的行为。

于 2012-05-11T07:37:30.743 回答