我正在使用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;
})
答案 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
我很想知道为什么需要窒息,并希望有更好的解决方案。