【问题标题】:How to include legacy module in Dojo AMD如何在 Dojo AMD 中包含遗留模块
【发布时间】:2013-09-27 15:18:52
【问题描述】:

我正在尝试将应用程序从 dojo 1.6 迁移到版本 1.9.1,并且我有一个我还不想迁移的遗留模块(它非常复杂,需要一些时间才能理解)。 Dojo 文档表明您可以将旧模块与 AMD 模块一起加载,但是当我尝试加载旧模块时,我会收到“dojo.provide is not a function”。

我的脚本:

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?谢谢

【问题讨论】:

标签: dojo amd


【解决方案1】:

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

【讨论】:

  • 不按照教程。 “Dojo 加载程序独有的最后一个功能是能够将遗留 Dojo 模块与 AMD 样式模块混合匹配。这使得可以缓慢而有条不紊地从遗留代码库过渡到 AMD 代码库,而无需转换所有内容立即。这在加载器处于同步模式和异步模式时都有效”找到dojotoolkit.org/documentation/tutorials/1.8/modules
  • 教程不正确。 Dojo Base(旧的dojo 对象)在异步模式下不会加载,典型的dojo.require 调用需要使用同步加载(除非您使用旧的XD 模式)。作为本教程的作者,我可以证明我写在那里的内容是错误的。当时,新加载程序的文档记录很差,也很难理解。
  • 这是一个很好的例子,说明我为什么应该接受你的回答 ;-)。有什么方法可以帮助我在教程中更正这个问题(不是我现在理解加载器)?
  • 教程已更新,更加准确。就贡献而言,不幸的是,教程是目前唯一没有受到良好源代码控制的文档(它位于旧的 Subversion 存储库中)。因此,没有简单的方法可以为它做出贡献。如果您有兴趣帮助文档,Dylan (dylan@dojotoolkit.org) 可以为您提供更多信息。
【解决方案2】:

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

【讨论】:

  • 这消除了错误,但代码实际上并没有工作。
  • 这只是节省您将整个旧模块转换为 AMD 的时间。您仍然需要查看该文档如何使您的模块工作。例如,将 dojo.provide 替换为 declare.
  • 查看我的修改版本
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多