Создаете простой класс наложения?
Вопрос
Я хотел бы создать несколько действительно простых классов наложения в GWT, чтобы обернуть некоторые элементы SVG.По сути, мне бы хотелось нарисовать прямоугольник, вот как я это делаю в JavaScript:
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '100%');
svg.setAttribute('height', '100%');
document.body.appendChild(svg);
var rect = document.createElementNS('http://www.w3.org/2000/svg','rect');
rect.setAttribute("width","300");
rect.setAttribute("height","100");
svg.appendChild(rect);
и теперь у меня возникли проблемы с переводом этого в GWT.Я надеялся, что смогу сделать очень тонкое наложение вокруг всех этих вызовов, что-то вроде этого:
public class SVGPanel extends JavaScriptObject {
protected SVGPanel() {}
public static native SVGPanel create(String width, String height) /*-{
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', width);
svg.setAttribute('height', height);
return svg;
}-*/;
}
public MyProject implements EntryPoint {
public void onModuleLoad() {
SVGPanel panel = SVGPanel.create("100%", "100%");
Document.get().getBody().appendChild(panel);
}
}
да, но я не понимаю, как мы можем перейти от javascript-представления SVG к Java-классам GWT.Во-первых, класс SVGPanel расширяет JavaScriptObject, но я не могу просто добавить его в класс тела документа, поскольку он ожидает тип Element.Если бы кто-то мог просто указать правильный способ построить этот мост, я бы смог приступить к делу.
Кроме того, я не уверен, что это оптимальный способ включения некоторых простых классов SVG. Должен ли я моделировать их с использованием классов DOM вместо того, чтобы пытаться использовать JSNI?
Спасибо
Решение
Вам нужно передать элемент в метод AppendChild.Так что просто сделайте свой класс наложения расширяющим Element вместо JavaScriptObject.
public class SVGPanel extends Element {
Обратите внимание, что Element является подклассом JavaScriptObject.
Другие советы
Я думаю, стоит проверить gwt-svg - хотя кажется, что они прекратили разработку где-то в 2007 году, кодовая база кажется достаточно прочной, прекрасно иллюстрирующей то, что вы хотите сделать, плюс в ней есть несколько приятных штрихов, таких как специальные реализации для (злого) IE6.Даже если код не работает так, как есть, надеюсь, он даст вам представление о том, с чего начать (и, возможно, вы даже выпустите свою работу с открытым исходным кодом, чтобы другие могли извлечь из нее пользу).
И еще есть GWTCanvas - возможно, именно это вы и пытаетесь реализовать :) Если нет, то стоит проверить хотя бы их API, чтобы посмотреть, как они справились с ситуацией.
Удачи!