我創建的延伸SimplePanel窗口小部件,並執行一些JSNI中的onLoad()方法:GWT部件與JSNI不附着尚未
public class AceEditor extends SimplePanel implements HasText {
private JavaScriptObject editor;
@Override
protected void onLoad() {
super.onLoad();
editor = createEditor(getElement());
}
private static native JavaScriptObject createEditor(Element element) /*-{
return $wnd.ace.edit(element);
}-*/;
@Override
public native void setText(String value) /*-{
[email protected]::editor.setValue(value);
}-*/;
@Override
public final native String getText() /*-{
return [email protected]::editor.getValue();
}-*/;
}
問題是,當我打電話setText
首次,小部件是不附件尚未(onLoad
尚未呼叫)。
我使用這個小工具和UiBinder
。
我可以用和檢查部件連接,但它似乎並沒有做正確的方式...
爲什麼小部件不附加任何更早的想法?
它似乎工作,但我認爲,JS初始化必須在'onLoad'完成,而不是在構造函數中完成,因爲小部件的'div'沒有附加到DOM。 – 2013-02-13 21:29:29
你說的是真實的,只要你的JS引用的是頁面加載之前不能訪問的DOM上的其他元素。但在你的情況下,它更像是一個ur對象的構造。換句話說,如果沒有編輯器本身,你的AceEditor的用處不大。同時你在onload之前調用了setText方法,所以這意味着其他一些對象已經需要你的AceEditor了。加載 – Rohit 2013-02-13 21:38:50