Вызов метода JSNI в @PostConstruct - Errai

У меня возникла проблема с вызовом функции JS из Java с помощью Errai 2.3.2. Я использую переключатель Bootstrap, и мне нужно вызвать функцию JS, чтобы активировать ее. Мне нужно сделать это после того, как страница создана и все элементы прикреплены к элементу DOM.

Я пробовал все это: @PostConstruct, @PageShowing, @PageShown, onAttach().. но ни один из них не работал у меня.

У меня есть это:

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

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

и когда я его отлаживаю, кажется, что метод onAttach() вызывается до того, как элементы будут прикреплены к DOM.

Любые идеи?


person cristianmiranda    schedule 14.11.2013    source источник


Ответы (1)


Вы не должны переопределять метод onAttach() класса Widget. Если вы хотите что-то сделать в случае прикрепления виджета, переопределите метод 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();
        }
    });
person El Hoss    schedule 15.11.2013
comment
Спасибо! Я использовал планировщик внутри метода onAttach(). Оно работает! - person cristianmiranda; 18.11.2013
comment
@el-hoss, почему не следует переопределять onAttach() по какой-либо конкретной причине :-) - person quarks; 23.02.2014
comment
onLoad() вызывается после того, как все виджеты присоединены и установлен флаг прикрепления. Взгляните на виджет.java. Это правильное место, чтобы что-то сделать, когда ваш виджет прикреплен. - person El Hoss; 23.02.2014