如何将d3与require.js集成

Ser*_*ido 21 requirejs d3.js

我在尝试将d3集成到require/backbone应用程序时遇到了问题.我的main.js包含类似的内容:

require.config({
  paths: {
    d3: 'libs/d3/d3.v2.min'
    backbone: ...
    ...
  }
});
Run Code Online (Sandbox Code Playgroud)

我的骨干看起来像(在coffeescript中)

define ['backbone','d3',...], (Backbone,d3,...) ->
  MyView = Backbone.View.extend
    initialize: () ->
      d3.somefunction
Run Code Online (Sandbox Code Playgroud)

控制台日志说d3为空.有没有一种简单的方法将d3集成到这种类型的应用程序中?

jrb*_*rke 50

D3不会调用定义()声明一个模块,所以当地的d3参考骨干视图不会是你想要的.使用d3生成的全局变量:

define(['backbone', 'd3'], function (backbone, ignore) {
    //Use global d3
    console.log(d3);
});
Run Code Online (Sandbox Code Playgroud)

或者使用shim配置声明d3的导出值:

requirejs.config({
    shim: {
        d3: {
            exports: 'd3'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这将告诉requirejs使用全局d3作为d3的模块值.

  • 对于在2014年1月之后遇到此问题的人来说,重要提示 - d3不再适用于requirejs shim导出全局对象.您需要明确要求它或设置全局引用.这里的解释 - https://github.com/mbostock/d3/issues/1693 (19认同)