Как включить dojox.gfx.SVG и dojox.gfx.VML в пользовательскую сборку Dojo с поддержкой разных браузеров? - PullRequest
0 голосов
/ 13 октября 2009

Я использую 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" ],
]

}; * * тысячу двадцать-пять

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

Ответы [ 2 ]

4 голосов
/ 15 октября 2009

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

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

0 голосов
/ 09 декабря 2009

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

gfxRenderer:'svg,silverlight,vml'

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

dojox.gfx статья о dojocampus

...