如何在Dojo AMD中包含遗留模块

时间:2013-09-27 15:18:52

标签: dojo amd

我正在尝试将应用程序从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的情况下解决这个问题?感谢

2 个答案:

答案 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