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