Делать простой оверлейный класс? - PullRequest
4 голосов
/ 25 января 2010

Я хотел бы сделать несколько действительно простых оверлейных классов в 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 к классам GWT java. Во-первых, класс SVGPanel расширяет JavaScriptObject, но я не могу просто добавить его в класс тела документа, поскольку он ожидает тип Element. Если бы кто-то мог просто указать правильный путь для того, чтобы сделать этот мост, я должен был бы начать после этого.

Кроме того, я не уверен, является ли это оптимальным способом для включения некоторых простых классов SVG. Должен ли я моделировать их, используя классы DOM, вместо того, чтобы пытаться использовать JSNI?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 января 2010

Вам нужно дать Элемент appendChild. Так что просто сделайте ваш класс наложения расширяющим Element вместо JavaScriptObject.

public class SVGPanel extends Element {

Обратите внимание, что Element является подклассом JavaScriptObject.

0 голосов
/ 25 января 2010

Я думаю, что стоит проверить gwt-svg - хотя похоже, что они остановили разработку примерно в 2007 году, кодовая база кажется достаточно солидной, прекрасно иллюстрирующей то, что вы хотите сделать, плюс в ней есть некоторые приятные штрихи, как специальные реализации для (злого) IE6. Даже если код не работает так, как есть, надеюсь, он даст вам идею начать (и, возможно, вы даже выпустите свою работу с открытым исходным кодом, чтобы другие могли извлечь из этого пользу).

И есть также GWTCanvas - что может быть тем, что вы пытаетесь реализовать :) Если нет, то стоит проверить хотя бы их API, чтобы увидеть, как они справляются с вещами.

Удачи!

...