使用味噌时为什么_未定义?

时间:2013-04-02 19:35:33

标签: javascript requirejs underscore.js

我正在尝试使用Miso(http://misoproject.com/dataset/),依赖项是underscore.js。我正在使用require.js,并在控制台中不断收到错误:“未捕获的ReferenceError:_未定义。”这是我的main.js文件:

require(["jquery", "underscore", "miso"], function($, _, miso) {

  $(function() {
    var ds = new Miso.Dataset({
      url : "/data/ma_region.csv",
      delimiter : " ",
    });
  });

});

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:3)

Miso期待全球范围内的_下划线。

在Miso的代码中:

(function(global, _) {

    /* has bunch of stuff using underscore */

}(this, _));

这意味着在最后一部分(this, _)中,它没有引用_下划线库,因为它在RequireJS中定义,这意味着它存在于匿名函数范围内。

所以你需要在模块中加载_下划线并将Miso包装起来,例如:

define(['underscore'], function(_) {

 /** Miso's code here because Miso is expecting the _ **/

});

您需要将其包含在Miso网站http://misoproject.com/dataset/tutorials/quickstart上列出的其他依赖项中:

  

依赖关系

     

如果您选择不包含生产版本   内置依赖项,您可能需要自己包含它们。数据集   需要以下库:

     
      
  • LoDash 0.9.0
  •   
  • Underscore.math.js(未知版本)
  •   
  • Underscore.deferred.js 0.2.0
  •   
  • moment.js 1.7.2('时间'数据类型)
  •   
     

如果您使用的是IE,则需要包含json2.js:

     
      
  • json2.js 2011-10-19
  •   

或者,我建议使用已预先打包依赖项的Miso版本,这样您就不用担心这个问题了。

答案 1 :(得分:0)

确保您的下划线库名为underscore.js,它与您的javascript代码位于同一目录中。这是require.js的baseURL。

如果不是这种情况,则应配置路径。请参阅http://requirejs.org/docs/api.html#config-paths