2013-11-14 36 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被连接时做一些事情。 –