我正在使用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是窒息的,并希望有一个更好的解决方案。