Как включить dojox.gfx.SVG и dojox.gfx.VML в пользовательскую сборку Dojo с поддержкой разных браузеров?

Я использую 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.».

Правильно знаете, я исключаю SVG и VML из своего профиля сборки dojo и позволяю dojo xhrGet остальным. Это работает, но требует еще три запроса (svg.js, shape.js, path.js, хотя последние два включены в мою сборку).

Что мне нужно включить в мою сборку, чтобы заставить векторные фигуры работать во всех браузерах "из коробки"?

Это мой профиль сборки, который работает, но требует дополнительных трех запросов (поэтому ни 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" ],
]

};

Спасибо за ваш ответ.

13.10.2009 08:14:55
2 ОТВЕТА
РЕШЕНИЕ

К сожалению, код dojox.gfx создается при условии, что во время выполнения загружается правильный рендер (svg или vml). Таким образом, сборка, которую вы просто тянете на верхнем уровне dojox.gfx - это путь.

Возможно, вы могли бы взломать код, чтобы поместить if (dojox.gfx.renderer == "svg") {} вокруг файлов dojox.gfx для svg. Вероятно, просмотр исходного кода dojox.gfx и вызовов dojo.requireIf () внизу даст представление о том, как обернуть каждый модуль.

4
14.10.2009 20:10:01
Я пойду с включением только dojox.gfx и позволю dojo обрабатывать все остальное во время выполнения. Спасибо!
Wolfram 16.10.2009 07:52:15

Вы пробовали ставить:

gfxRenderer:'svg,silverlight,vml'

в ваших настройках djcongfig?

dojox.gfx статья о dojocampus

0
8.12.2009 23:40:28