0
gwt 코드에 캔버스 요소를 만들고 싶습니다. 그런 다음 새로 만든 캔버스 DOM 요소에 페인트하기 위해 제 3 자 자바 스크립트 라이브러리를 적용하고 싶습니다.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();
위의 코드 조각은 새로운 캔버스 요소를 만들고 내 현재 DOM에 추가 : 그래서 여기에 내가하고 싶은 일의 거친 아이디어이다. 새로운 캔버스를 추가 한 후에 JSNI를 적용하여이 캔버스 요소를 얻고 싶습니다.
public static native void getCanvas() /*-{
console.log("Canvas? = " + document.getElementById("canvas"));
}-*/;
이제는이 캔버스 요소를 발견했을 것입니다. 그러나 그 대신 콘솔에 다음 출력이 표시됩니다.
Canvas? = null
새 요소에 액세스 할 수없는 이유는 무엇입니까?
BTW : Chrome의 관리자에서 DOM을 확인하면 할당 된 ID가있는 추가 된 캔버스 요소를 볼 수 있습니다.
감사합니다. 문제가 해결되었습니다. JsInterop에 관해서 : 저는 제 경우에 그것을 어떻게 적용해야하는지 모르겠습니다. 적어도 필자는 JsInterop의 문서 또는 이점을 이해하지 못합니다. 이 루이지 녀석이 추천 한 튜토리얼도 아닙니다. 내 말은 타사 라이브러리의 기능에 액세스하려고합니다. – toom
당신의 경우, elemental2는 이미 console.log와 document.getElementById 두 개의 호출을 가지고 있습니다. 세 번째 파트 라이브러리를 호출하기 위해 JSNI를 작성하는 것은 JSNI가 gwt 3에서 작동을 멈추고 JsInterop처럼 형식이 안전하지 않다는 점을 제외하면 JsInterop을 호출하여 JSNI를 호출하는 것만 큼 어렵습니다. –