0

我们计划将 dojo 1.8 与旧版本 (1.2) 一起使用。我们希望全局变量 dojo 指向 1.2 版本的 dojo 和 dojo18 指向 1.8 版本。我尝试使用 dojoConfig 的 packages 属性来使其正常工作。

<script type="text/javascript" src="<some_path>/dojo-release-1.2.0/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script>
  djConfig = {};
  var dojoConfig = {
      parseOnLoad: true,
      async: true,
      baseUrl: '<some_path>/dojo-release-1.8.3/dojo',
      packages: [
                 {name: 'dojo18', location: '<some_path>/dojo-release-1.8.3/dojo', 
                     packageMap: {
                         dojo: 'dojo18', 
                         dijit: 'dijit18', 
                         dojox: 'dojox18'
                     }
                 },
                 {name: 'dijit18', location: '<some_path>/dojo-release-1.8.3/dijit'},
                 {name: 'dojox18', location: '<some_path>/dojo-release-1.8.3/dojox'},
                ],
      deps: ["dojo18", "dijit18", "dojox18"]
  };
</script>
<script src="/cuic/scripts/dojo-release-1.8.3/dojo/dojo.js"></script>

然而,这似乎不起作用 - 现在有 2 个全局变量 - dojo 和 dojo18 - 两者都指向 1.8 版本的 Dojo。

由于重新定位 Dojo 的已编译版本的包的重定位不起作用,我想知道是否有任何构建属性暴露,通过自定义构建 dojo 将 dojo 更改为 dojo18、dijit 到 dijit18、dojox 到 dojox18。

4

2 回答 2

0

这是在黑暗中的总镜头......

.8 调用会创建一个 dojo 实例 .. 这很正常……它会杀死您的旧 dojo。

尝试将在第 1 行中创建的 dojo 对象克隆到另一个变量,紧跟在实例化之后。然后按照流程的其余部分,将 1.8 dojo 实例也克隆到另一个变量。

最后将新变量分别克隆回dojo和dojo18 ...

没有承诺,但这是一个快速的事情,你可以在深入研究之前尝试一下,我也有兴趣看看它是否有效。如果它确实有效,您还应该能够将 djConfig 用于第一个实例,将 dojoConfig 用于第二个实例......

对不起......我在我的手机上,所以我无法测试它:)......

后来..一个非常邋遢的测试,但这有效......

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.4.3/dojo/dojo.xd.js"></script>
<script type="text/javascript" >var dojette = dojo;</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js"></script>    
<script type="text/javascript" >var dojo18 = dojo;</script>
<script type="text/javascript" >var dojo = dojette;
  console.log(dojo.version);
  console.log(dojo18.version);
</script>

如果您将 dojo 和 dojo18 作为完整对象转储,您会发现它们具有完整的功能等。我没有进一步分离模块名称空间等,所以我的其余代码仍然爆炸,但这是一个开始...我希望它有帮助...

于 2013-03-23T10:25:46.043 回答
0

我通过修改 dojo/_base/kernel 代码的 scopeMap 变量获得了自定义构建以创建全局变量“dojo18”、“dijit18”、“dojox18”。

    var scopeMap =
                // a map from a name used in a legacy module to the (global variable name, object addressed by that name)
                // always map dojo, dijit, and dojox
                {
                    dojo:["dojo18", dojo],
                    dijit:["dijit18", dijit],
                    dojox:["dojox18", dojox]
                },

此配置确保全局变量将被命名为“dojo18”而不是“dojo”。当通过 dojoConfig 变量提供时,scopeMap 变量似乎在早期版本的 dojo 中受到尊重。但它似乎不适用于 1.8.x 版本。我想知道这是否不再受支持。

于 2013-03-24T15:19:22.223 回答