通过require(AMD)加载cola.js

时间:2015-10-24 13:33:33

标签: requirejs

我正在使用require.js以异步方式将cola.js加载到Chrome浏览器中。我在本地托管了cola.v3.min.js,并在我的require.config块中引用。浏览器找到模块正常,加载状态为200,我可以检查浏览器中的cola.v3.min.js内容。但是在功能范围内,可乐出现了未定义。要求似乎没有抛出错误 - 只是将可乐传递给undefined。 D3加载并正常工作。看看cola.js的来源,它似乎解决了AMD加载问题,而'cola'似乎是正确的def。为什么没有可乐? THX。

define('geotbl', ['jquery','underscore','backbone','cola','d3'],
  function($, _, Backbone, cola, d3){

    tbl.force = cola.d3adaptor()   //<-- cola is undefined here
               .linkDistance(320)
               .etc;
  })

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

我试过垫片,但似乎没有用。所以我使用以下新石器时代方法:

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

我很想知道为什么需要窒息,并希望有更好的解决方案。