我是 Dojo 的新手(1.7)并且完全愿意接受我是个白痴(我只是希望不是)。我更愿意为 AMD 使用 require.js,但我使用的是第 3 方 (ESRI) 映射 API,它强制 Dojo 在我身上使用并使用它的 AMD,这意味着如果我尝试使用 require.js 也会出现严重错误。
我有一个define
依赖于 Backbone 和 Underscore 的模块(我最终可能会使用 Dojo 的 MVC,但我不认为这个问题是 Backbone 特有的,所以我想弄清楚它)。奇怪的是,当模块加载时,Dojo 似乎在我的内部执行回调define
,此时依赖项(下划线和主干)是空对象{}
。我的回调中发生错误,return Backbone.View.extend...
因为 Backbone 的View
属性不存在。
我知道 Backbone 依赖于 Underscore,到目前为止,我不知道如何确保在不使用 hacky-looking 的情况下首先加载 Underscore require({async:0},['test1.js','test2.js'...
。但是,在这种情况下,Underscore 也是一个空对象,所以在define
加载任何依赖项之前都会执行 's 回调???
编辑在此错误发生之前,我在控制台中看到了 Underscore 和 Backbone HTTP 请求以及 200 个响应,所以我假设它们的引用没有问题。
具体的东西...
索引.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>
应用程序.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 之前加载下划线的任何替代建议都会非常有帮助!