Question

Je voudrais faire quelques classes de superposition vraiment simples GWT pour envelopper des trucs SVG. Je voudrais essentiellement obtenir un rectangle dessiné, voici comment je le fais en 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);

et maintenant je vais avoir du mal à traduire cela à GWT. J'espérais que je pouvais faire une superposition très mince autour de tous ces appels, quelque chose comme ceci:

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);
    }
}

oui mais je n'ai pas prise sur la façon dont nous pouvons passer de la représentation javascript des choses SVG aux classes Java GWT. D'une part, la classe SVGPanel étend JavaScriptObject, mais je ne peux pas simplement l'ajouter à la classe du corps de document parce qu'il est attend un type d'élément. Si quelqu'un pourrait simplement indiquer la bonne façon de faire ce pont, je devrais pouvoir y aller après.

En outre, je ne suis pas sûr que cela la meilleure façon d'intégrer certaines classes SVG simples, devrais-je les modéliser en utilisant les classes DOM au lieu d'essayer d'utiliser JSNI?

Merci

Était-ce utile?

La solution

Vous devez donner un élément à appendChild. Il suffit donc de faire votre classe de recouvrement étendre l'élément au lieu de JavaScriptObject.

public class SVGPanel extends Element {

Notez que l'élément est une sous-classe de JavaScriptObject.

Autres conseils

Je pense qu'il est utile de vérifier GWT-svg - alors qu'il ressemble ils ont arrêté le développement autour de 2007, semble assez codebase solide, ce qui illustre bien ce que vous voulez faire, plus il a quelques touches, comme les implémentations spéciales pour le (mal) IE6. Même si le code ne vous espérons qu'il fonctionnera, ils ne sont pas comme ça, donner une idée était de commencer (et vous auriez peut-être même libérer votre travail open source afin que d'autres puissent en bénéficier).

Et il y a aussi GWTCanvas - qui pourrait être ce que vous essayez de mettre en œuvre :) Sinon, il vaut la peine de vérifier au moins leur API, pour voir comment ils ont géré les choses.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top