我正在使用dojo.gfx在我的网站上创建矢量形状和文本,当我“ dojo.require”-使用Javascript中的所有依赖项时,一切工作正常。但是,当我在自定义版本(尤其是dojox.gfx,dojox.gfx.svg和dojox.gfx.vml)中构建所需的所有内容时,Dojo对支持SVG的浏览器和IE(VML)的自动区分似乎正在崩溃。

如果仅包含dojox.gfx.svg,则IE会中断(请参见下文),如果添加dojox.gfx.vml,则脚本将无法在Firefox中运行。

在IE中,脚本在我的自定义dojo构建的以下行中中断,并显示“对象不支持属性或方法”:

*s.rawNode = _createElementNS(svg.xmlns.svg, "svg");*


带有_createElementNS的注释为“内部助手处理创建命名空间的元素。主要是为了使SVG标记输出可在IE上使用。”。

知道了,我在我的dojo构建配置文件中同时排除了SVG和VML,而让dojo xhr得到了其余的东西。这可以工作,但需要三个以上的请求(svg.js,shape.js,path.js,尽管后两个包含在我的构建中)。

我需要在构建中包括什么才能使Vector形状“开箱即用”地在所有浏览器中运行?

这是我的构建配置文件,可以正常工作,但需要另外三个请求(因此svg和vml均未明确包含):

dependencies ={
layers:  [
    {
    name: "mybuild-dojo.js",
    dependencies: [
     "dojo.fx",
     "dojox.gfx",
     "dojox.gfx.shape",
     "dojox.gfx.path",
     "dojox.gfx.VectorText",
     "dojox.xml.DomParser",
     "dojox.image.Lightbox",
     "dojo.parser"
    ]
    }
],
prefixes: [
    [ "dijit", "../dijit" ],
    [ "dojox", "../dojox" ],
]


};

谢谢您的回答。

最佳答案

不幸的是,dojox.gfx代码是在运行时引入正确的渲染器(svg或vml)的情况下构造的。因此,只需引入顶级dojox.gfx即可构建。

您可能会修改代码,将if(dojox.gfx.renderer ==“ svg”){}放在svg的dojox.gfx文件周围。大概看一下dojox.gfx源代码和底部的dojo.requireIf()调用,将为如何包装每个模块提供一个思路。

07-27 15:48