2013-11-14 61 views
0

我在嘗試使用Errai從Java調用JS函數的問題2.3.2 我正在使用Bootstrap開關,並且需要調用JS函數才能激活它。我需要在創建頁面之後執行此操作,並將所有元素都附加到DOM元素。在@PostConstruct中調用JSNI方法 - Errai

我試過這一切:@PostConstruct,@PageShowing,@PageShown,onAttach()..但沒有一個爲我工作。

我有這樣的:

@Override 
public void onAttach(){ 
    enableToggleSwitch(); 
} 

public static native void enableToggleSwitch() /*-{ 
    $wnd.enableToggle(); 
}-*/; 

,當我調試它,它似乎是這些元件被附接到DOM之前onAttach()方法被調用。

任何想法?

回答

1

您不應該重寫Widget類的onAttach()方法。如果您想要在附加小部件的情況下執行某些操作,請覆蓋onLoad方法。

/** 
    * This method is called immediately after a widget becomes attached to the 
    * browser's document. 
    */ 
    protected void onLoad() { 
     enableToggleSwitch(); 
    } 

試試這個。

如果這不能解決你的問題,你可以嘗試使用計劃:

Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
     @Override 
     public void execute() { 
      enableToggleSwitch(); 
     } 
    }); 
+0

謝謝!我在onAttach()方法中使用了Scheduler。有用! –

+0

@ el-hoss爲什麼「不應該覆蓋onAttach()」的任何特定原因:-) – xybrek

+0

onLoad()在連接所有Widgets並設置附加標誌後調用。看看Widget.java。這是正確的地方,當你的widget被連接時做一些事情。 –