如何重命名全球道场,dijit&构建期间的dojox全局变量(dojo 1.8.x)

时间:2013-03-22 12:53:10

标签: dojo

我们计划将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>

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

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

2 个答案:

答案 0 :(得分:0)

这是在黑暗中完全拍摄的......

<。> .8调用创建一个dojo实例..这是正常的...它会杀死你的旧道场。

尝试在实例化之后立即将第1行中创建的dojo对象克隆到另一个变量。然后,在完成剩余的过程后,将1.8 dojo实例也克隆到另一个变量。

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

没有承诺,但是在你太深入之前你可以尝试一下,我也有兴趣看看它是否有效。如果它确实有效,你也应该能够为第一个实例使用djConfig,为第二个实例使用dojoConfig ......

抱歉......我在手机上,所以无法测试:) ...

后来..一个非常邋test的测试,但是这个有用......

<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作为完整的对象转储,你会发现它们已经完成了函数等。我没有进一步分离出模块命名空间等,所以我的其余代码仍然爆炸,但是这是一个开始...我希望它有所帮助...

答案 1 :(得分:0)

通过修改dojo / _base /内核代码的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版本。我想知道这是不再支持的。