如何在包括AMD道场原有模块(How to include legacy module in Doj

2019-10-18 16:48发布

我试图从道场1.6应用程序迁移到1.9.1版本,我已经说我不想尚未迁移(这是很复杂的,并会采取了一些时间来理解)的传统模块。 道场文档表明您可以加载遗留模块与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? 谢谢

Answer 1:

为了让传统的模块加载,你需要运行在传统模式下,这意味着你可以不设置装载机async: true 。 只要你与运行的async: false (默认),你就可以加载并使用传统的模块从AMD模块,反之亦然。



Answer 2:

AMD的一个很好的一点是,你不必使用“道场”和“的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



文章来源: How to include legacy module in Dojo AMD
标签: dojo amd