Underscore.js Uncaught TypeError:无法调用null的方法'template'

时间:2012-05-11 07:27:44

标签: underscore.js requirejs

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行。这让我发疯了......

1 个答案:

答案 0 :(得分: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需要相同的行为。