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