通过require (AMD)加载cola.js



我正在使用require.js异步加载cola.js到Chrome浏览器。我有cola.v3.min.js在本地托管,并在我的要求中引用。配置块。浏览器发现模块ok,以状态200加载它,我可以在浏览器中检查cola.v3.min.js内容。但是在函数范围内,可乐出现未定义。Require似乎没有抛出错误——只是将cola作为未定义传递。D3加载和工作良好。看看cola.js的源代码,它似乎解决了AMD的加载问题,而"cola"似乎是正确的定义。Thx .

define('geotbl', ['jquery','underscore','backbone','cola','d3'],
  function($, _, Backbone, cola, d3){
    tbl.force = cola.d3adaptor()   //<-- cola is undefined here
               .linkDistance(320)
               .etc;
  })

我发现需求似乎有时会加载这个可乐模块,但并非总是如此。最后,我通过在require.js入口点的config部分添加一个shim来让它工作:

require.config({
  paths: {
    'cola': '/vendor/colajs/cola.min',
  }, 
  shim: {
        'cola':{ exports: 'cola'},
        'underscore': { exports: '_' },
  }, etc.

我试过垫片,但它似乎不工作。所以我使用以下新石器时代的方法:

define(['jquery','underscore','backbone','cola','d3',], 
  function($, _, Backbone,d3,cola,tpl_dendro){
    this.g_cola = cola;  // cola is loaded here, so save in global context
    var myView = Backbone.View.extend({  // create the local context
      initialize: function(p){
         // here require.js has created cola in the local context but left it undefined
         // so use the global copy created earlier:
         if(cola === undefined){ cola = g_cola; }  // crude but effective

我很想知道为什么require是窒息的,并希望有一个更好的解决方案。

最新更新