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

如何在Dojo AMD中包含遗留模块,dojo,amd,Dojo,Amd,我正在尝试将一个应用程序从dojo 1.6迁移到1.9.1版,我有一个遗留模块,我还不想迁移(它非常复杂,需要一些时间才能理解)。Dojo文档表明您可以加载遗留模块和AMD模块,但是当我尝试加载时,当加载程序尝试加载遗留模块时,我得到一个“Dojo.provide不是函数” 我的剧本: require([..., "agsjs/dijit/TOC","dojo/domReady!"], function(..., TOC) { on(map,'layers-ad

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

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函数可能仍然有效

此链接可提供您所需的一切:


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函数可能仍然有效

此链接可提供您所需的一切:



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

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

这消除了错误,但代码实际上不起作用。这只是为您节省了将整个旧模块转换为AMD的时间。您仍然需要查看该文档,了解如何使模块正常工作。例如,将dojo.provide替换为declare.See my modified Version消除了错误,但代码实际上不起作用。这只是为了节省您将整个旧模块转换为AMD的时间。您仍然需要查看该文档,了解如何使模块正常工作。例如,将dojo.provide替换为declare.See my modified versionNot(根据教程)。“Dojo loader独有的最后一个功能是能够将传统Dojo模块与AMD风格的模块混合和匹配。这使得可以缓慢而有条理地从传统代码库过渡到AMD代码库,而无需立即转换所有内容。这在加载程序处于同步模式和处于as模式时都有效ync模式“发现教程不正确。Dojo Base(旧的
Dojo
对象)在异步模式下不加载,典型的
Dojo.require
调用需要使用同步加载(除非使用旧的XD模式)。作为本教程的作者,我可以证明我在那里写的东西是错误的。当时,新的加载器没有很好的文档记录和理解。这就是为什么我应该接受你的答案的一个很好的例子;-)。有没有一种方法可以帮助我在教程中纠正这一点(不是因为我现在理解加载器)?教程已经更新为更准确。就贡献而言,不幸的是,这些教程是目前没有良好源代码管理的唯一文档(它位于旧的Subversion存储库中)。因此,没有一种简单的方法可以为它做出贡献。迪伦(dylan@dojotoolkit.org)如果您对文档有兴趣,可以向您提供更多信息。根据教程,不提供。“Dojo loader独有的最后一个功能是能够将传统Dojo模块与AMD风格的模块混合和匹配。这使得可以缓慢而有条理地从传统代码库过渡到AMD代码库,而无需立即转换所有内容。这在加载程序处于同步模式和处于as模式时都有效ync模式“发现教程不正确。Dojo Base(旧的
Dojo
对象)在异步模式下不加载,典型的
Dojo.require
调用需要使用同步加载(除非使用旧的XD模式)。作为本教程的作者,我可以证明我在那里写的东西是错误的。当时,新的加载器没有很好的文档记录和理解。这就是为什么我应该接受你的答案的一个很好的例子;-)。有没有一种方法可以帮助我在教程中纠正这一点(不是因为我现在理解加载器)?教程已经更新为更准确。就贡献而言,不幸的是,这些教程是目前没有良好源代码管理的唯一文档(它位于旧的Subversion存储库中)。因此,没有一种简单的方法可以为它做出贡献。迪伦(dylan@dojotoolkit.org)如果您对文档有兴趣,可以向您提供更多信息。搜索引擎将我带到这里,因此我将在这里留下一个对我有帮助的链接:搜索引擎将我带到这里,因此我将在这里留下一个对我有帮助的链接: