4

いくつかのSVGのものをラップするために、GWTでいくつかの本当に単純なオーバーレイクラスを作成したいと思います。基本的に長方形を描画したいのですが、これが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);
    }
}

ええ、でも私は、SVGのもののjavascript表現からGWTjavaクラスにジャンプする方法を理解していません。1つは、SVGPanelクラスがJavaScriptObjectを拡張することですが、Elementタイプを想定しているため、単純にDocument本体クラスに追加することはできません。誰かがその橋を作る正しい方法を指摘することができれば、私はその後に行くことができるはずです。

また、これがいくつかの単純なSVGクラスを組み込むための最適な方法であるかどうかはわかりませんが、JSNIを使用するのではなく、DOMクラスを使用してモデル化する必要がありますか?

ありがとう

4

2 に答える 2

2

あなたはappendChildに要素を与える必要があります。したがって、オーバーレイクラスにJavaScriptObjectではなくElementを拡張させるだけです。

public class SVGPanel extends Element {

ElementはJavaScriptObjectのサブクラスであることに注意してください。

于 2010-01-26T05:44:19.720 に答える
0

gwt-svgをチェックする価値があると思います-2007年頃に開発が停止したように見えますが、コードベースは十分に堅固で、やりたいことをうまく示しています。さらに、(邪悪な)IE6の特別な実装のようないくつかの素晴らしいタッチがあります。コードが正常に機能しない場合でも、開始するというアイデアが得られることを願っています(そして、他の人がその恩恵を受けることができるように、作業をオープンソースでリリースすることもできます)。

また、GWTCanvasもあります。これは実装しようとしているものかもしれません:)そうでない場合は、少なくともAPIをチェックして、それらがどのように処理されたかを確認する価値があります。

幸運を!

于 2010-01-25T20:14:21.293 に答える