Вопрос

Я хотел бы создать несколько действительно простых классов наложения в 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, чтобы посмотреть, как они справились с ситуацией.

Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top