1

我正在尝试将应用程序从 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?谢谢

4

2 回答 2

1

为了加载遗留模块,您需要在遗留模式下运行加载程序,这意味着您无法设置async: true. 只要您使用async: false(默认)运行,您就可以从 AMD 模块加载和使用旧模块,反之亦然。

于 2013-09-28T03:52:28.373 回答
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

于 2013-09-27T15:36:44.653 回答