【发布时间】:2012-09-05 18:11:19
【问题描述】:
我是 Dojo (1.7) 的新手,完全愿意接受我是个白痴(我只是希望不是)。我更愿意为 AMD 使用 require.js,但我使用的是第 3 方 (ESRI) 映射 API,它强制我使用 Dojo 并使用它的 AMD,这意味着如果我尝试使用 require.js 也会出现严重错误。
我有 defined 一个依赖于 Backbone 和 Underscore 的模块(我最终可能会使用 Dojo 的 MVC,但我不认为这个问题是 Backbone 特有的,所以我想弄清楚它)。奇怪的是,当模块加载时,Dojo 似乎在我的define 中执行回调,此时依赖项(下划线和主干)是空对象{}。由于 Backbone 的 View 属性不存在,我的回调的 return Backbone.View.extend... 中出现错误。
我知道 Backbone 依赖于 Underscore,到目前为止,我不知道如何确保在不使用看起来很老套的 require({async:0},['test1.js','test2.js'... 的情况下首先加载 Underscore。但是,在这种情况下,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();
}
};
});
主视图.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 之前加载下划线的任何替代建议都会非常有帮助!
【问题讨论】:
标签: javascript dojo dependencies amd