[英]Dojo AMD loader executing define callbacks with empty / missing dependencies
我是Dojo(1.7)的新手,并且完全愿意接受我是个白痴(我只是希望不要)。 我为AMD使用require.js更为自在,但我使用的是第3方(ESRI)映射API,该API强制Dojo出现在我身上并使用其AMD,这意味着如果我也尝试使用require.js会出现讨厌的错误。
我已经define
了一个依赖于Backbone和Underscore的da模块(我可能最终会使用Dojo的MVC,但是我认为这个问题不是Backbone特有的,所以我想弄清楚它)。 奇怪的是,加载模块时,Dojo似乎正在我的define
内执行回调,并且此时依赖项(Underscore和Backbone)是空对象{}
。 我的回调函数的return Backbone.View.extend...
发生错误,因为Backbone的View
属性不存在。
我知道Backbone依赖于Underscore,到目前为止,我还不知道如何确保在不使用看起来像hacky的require({async:0},['test1.js','test2.js'...
但是,在这种情况下,Underscore也是一个空对象,因此在加载任何依赖项之前执行define
的回调?
编辑在发生此错误之前,我在控制台中同时看到了Underscore和Backbone HTTP请求以及200个响应,因此我认为它们的引用中没有问题。
具体的东西...
index.html:
<script type="text/javascript">
var dojoConfig = {
tlmSiblingOfDojo: false,
packages: [
{name: 'app', location: '/js'},
{name: 'lib', location: '/js/lib'}
],
aliases: [
['Backbone', 'lib/backbone-0.9.2.min'],
['_', 'lib/underscore-1.3.3.min'],
['$', 'lib/jquery-1.8.0.min'],
['ready', 'dojo/domReady']
]
};
</script>
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.1"></script>
<script type="text/javascript">
require([ 'app/app' ], function(App) {
App.initialize();
});
</script>
app.js:
define(['app/views/main-view'], function(MainView) {
return {
initialize : function() {
new MainView();
}
};
});
main-view.js:
define(['_', 'Backbone', 'ready!'], function(_, Backbone) {
// *** ERROR THROWN HERE, Backbone = {}, _ = {} ***
return Backbone.View.extend({
el: 'main',
initialise: function() {
console.log('main view initialising');
this.render();
},
render: function() {
console.log('main view rendering');
}
});
});
谁能告诉我这是怎么回事? 此外,在Backbone之前加载Underscore的任何其他建议也将非常有用!
只需更改依赖关系的顺序即可:
define(['_', 'Backbone', 'ready!'], function(_, Backbone) { /*...*/});
因为你ready!
_
变量中的插件和Backbone
变量中的_.js
。
编辑:您可以嵌套它:
define(["_", "require"], function(_, require) {
require(["Backbone"], function(Backbone) {
// your code here
})
})
另外,如果下划线或Backbone不是AMD模块,则本地函数变量将覆盖它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.