我正在尝试将应用程序从dojo 1.6迁移到1.9.1版本,而且我还有一个我不想迁移的遗留模块(它非常复杂,需要一些时间才能理解)。 Dojo文档表明您可以加载遗留模块和AMD模块,但是当我尝试时,当加载程序尝试加载旧模块时,我得到“dojo.provide不是函数”。
我的剧本:
require([..., "agsjs/dijit/TOC","dojo/domReady!"],
function(..., TOC) {
on(map,'layers-add-result',function(results){
//Add Legend
var toc = new TOC({
map: map,
layerInfos:legendLayers
}, 'legendDiv');
toc.startup();
});
});
模块的第一行代码:
dojo.provide('agsjs.dijit.TOC');
一切正常,直到加载器尝试加载agsjs / dijit / TOC模块,在那里我得到“dojo.provide不是函数”错误。如何在不将整个模块重构到AMD的情况下解决这个问题?感谢
答案 0 :(得分:1)
为了加载旧模块,您需要在传统模式下运行加载程序,这意味着您无法设置async: true
。只要您使用async: false
(默认值)运行,您就可以加载和使用AMD模块中的旧模块,反之亦然。
答案 1 :(得分:0)
AMD的一个优点是你现在不必使用“dojo”和“dijit”全局变量。如果您不想在旧模块中更改所有这些dojo.xxx调用,您可以尝试将旧模块包装在
中define([
"dojo/_base/declare",
"dojo", "dijit",
...
], function(declare, dojo, dijit) {
return declare([/*your parent widgets*/], {
//your old module content at here, maybe you need make little modifications of your old module
});
});
这样那些dojo.xxx函数仍然可以工作。
此链接可能提供您所需的一切:
http://dojotoolkit.org/reference-guide/1.9/releasenotes/migration-17.html