web2py: как определить, когда компонент LOAD загружается через ajax?

Я добавляю компонент на свою страницу web2py, используя {{=LOAD(...)}}, как описано в http://web2py.com/books/default/chapter/29/12/components-and-plugins#LOAD, но мне нужно запустить некоторый javascript после загрузки компонента. Обычно, если что-то загружается через ajax, происходит успешный обратный вызов. Как я могу установить один из них через {{=LOAD(...)}} в web2py?


person user2667066    schedule 18.11.2016    source источник


Ответы (1)


Самый простой подход — установить response.js в контроллере компонента:

def mycomponent():
    response.js = 'alert("mycomponent just loaded");'
    return dict()

В качестве альтернативы вы можете просто включить тег <script> непосредственно в сам компонент, который будет выполняться при загрузке компонента.

Наконец, всякий раз, когда вызов web2py Ajax завершается, запускается событие ajax:complete. Итак, вы можете настроить обработчик событий и проверить, является ли ответ Ajax компонентом:

  $(document).on('ajax:complete', function(e, xhr, status) {
    if (xhr.getResponseHeader('web2py-component-content')) {
      alert('A component just loaded.');
    }
  });

Обратите внимание, что наличие заголовка web2py-component-content указывает на то, что ответ Ajax является компонентом.

Единственным недостатком этого последнего подхода является то, что обработчик событий будет запущен до содержимого компонента, добавленного в DOM, поэтому, если обработчик событий выполняется долго, он может заметно задержать появление составного содержания.

person Anthony    schedule 18.11.2016
comment
Я пытаюсь изменить DOM (выделить строку) после ЗАГРУЗКИ на стороне клиента. response.js работает нормально, если представление компонента не кэшируется. В этом случае он не отправляется. ajax:complete действительно получает триггер, но, как вы упомянули, он запускается до контента, добавленного в DOM. Что отменяет мои модификации. Есть ли способ изменить содержимое до его применения? - person sherve; 07.12.2017