Dojo AMD加载器执行定义具有空/缺少依赖关系的回调
我是新来的道场(1.7),完全愿意接受我是一个白痴(我只是希望不会)。 我更愿意使用AMD的require.js,但我使用的是第三方(ESRI)映射API,它强制Dojo对我使用AMD,这意味着如果我尝试并使用require.js,则会出现令人讨厌的错误。
我已经define
da模块,它依赖于Backbone和Underscore(我最终可能会使用Dojo的MVC,但我不认为这个问题是特定于Backbone的,所以我想弄清楚它)。 奇怪的是,似乎Dojo在模块加载时正在执行我的define
的回调,此时依赖关系(Underscore和Backbone)是空对象{}
。 在我的回调的return Backbone.View.extend...
错误,因为Backbone的View
属性不存在。
我知道Backbone依赖于Underscore,到目前为止,我还不知道如何确保Underscore先被加载,而不使用哈希式的require({async:0},['test1.js','test2.js'...
然而,在这种情况下下划线也是空的对象,因此该define
被加载或者依赖之前执行的回调???
编辑我发现这个错误发生之前,在控制台中看到下划线和骨干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();
}
};
});
主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!
插件在_
变量和_.js
在Backbone
变量。
编辑:你可以嵌套它:
define(["_", "require"], function(_, require) {
require(["Backbone"], function(Backbone) {
// your code here
})
})
另外,如果下划线或Backbone不是AMD模块,则本地函数变量将覆盖它们。
链接地址: http://www.djcxy.com/p/92517.html上一篇: Dojo AMD loader executing define callbacks with empty / missing dependencies