我想我并不完全理解require.js的工作方式。下面是我创建的一个简单模块:
requirejs.config({
paths: {
'underscore' : 'libs/underscore-min',
'backbone' : 'libs/backbone-min'
}
});
define([
"underscore",
"backbone"
], function(_, Backbone) {
console.log(_);
console.log(Backbone);
var MyCollection = Backbone.Collection.extend({
initialize: function() {
this.on("all", function(event) {
console.log(event);
});
}
});
return MyCollection;
});我从我的html加载它:
<script data-main="js/mycollection.js" src="js/libs/require.min.js"></script>问题是它断断续续地工作。有时Backbone对象会在我需要的时候出现在函数中,有时不会(并给我带来http://requirejs.org/docs/errors.html#notloaded错误)。如果我只是在浏览器中点击重新加载,我会得到50/50的更改。
这里我肯定遗漏了一些非常基本的东西,报告的错误对我来说没有任何意义,我认为require.js机制的整个想法是只有当所有依赖项都加载时才会调用我的函数。
发布于 2012-08-13 07:09:05
我的猜测是,您使用的不是下划线和主干的AMD版本。如果是这种情况,并且这两个包没有包装为AMD模块-那么用于模块的定义函数将不会像它应该的那样工作。
对于非模块js脚本,更合适的形式是使用require()函数。
或者-你可以在这里找到下划线和主干的AMD版本。AMD支持在某种程度上被取消了下划线和主干。
发布于 2012-08-13 15:14:19
由于下划线和Backbone没有被定义为AMD模块,require.js不知道下划线是Backbone的依赖项。所以我猜在50%的情况下,当Backbone尝试使用下划线时,下划线不会加载。
您可以使用require.js填充配置http://requirejs.org/docs/api.html#config-shim告诉require.js有关依赖关系结构的信息。
https://stackoverflow.com/questions/11926157
复制相似问题