0
私のgwtコードにキャンバス要素を作成します。その後、新たに作成されたキャンバスDOM要素をペイントするために、サードパーティ製のJavaScriptライブラリを適用したいと考えています。だからここに私がやりたいものの目安です:GWT JSNIで最近作成された要素が見つかりません
public void onModuleLoad() {
Canvas canvas = Canvas.createIfSupported();
canvas.getElement().setId("canvas");
canvas.setWidth("800px");
canvas.setHeight("500px");
canvas.getElement().getStyle().setProperty("border", "black solid 1px");
RootPanel.get("rootDiv").clear();
RootPanel.get("rootDiv").add(canvas);
getCanvas();
上記のコード部分は、新しいcanvas要素を作成し、私の現在のDOMに追加します。新しいキャンバスを追加した後、このキャンバス要素を取得するためにJSNIを適用したいと思います。
public static native void getCanvas() /*-{
console.log("Canvas? = " + document.getElementById("canvas"));
}-*/;
ここで私はこのキャンバス要素を見つけたと思います。しかし、代わりにコンソールに次の出力が表示されます。
Canvas? = null
なぜ新しい要素にアクセスできないのですか?
BTW:ChromeのインスペクタでDOMを確認すると、割り当てられたIDで追加されたキャンバス要素が表示されます。
ありがとう、それが問題を解決しました。 JsInteropについて:私は私のケースでそれをどのように適用すべきかわかりません。少なくとも私はJsInteropのドキュメントや利点を理解していません。このluigi男のおすすめチュートリアルもありません。つまり、サードパーティのライブラリの機能にアクセスしたいのです。 – toom
あなたのケースでは、elemental2にはすでにconsole.logとdocument.getElementByIdの2つの呼び出しがあります。 JSNIを記述することは、JSNIがgwt 3で動作しなくなることを除いてJsInteropを呼び出すことと同じくらい難しく、JsInteropのように型安全ではありません。 –