2016-11-18 5 views
0

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

ответ

2

Самый простой подход должен был бы установить 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, так что, если обработчик событий занимает много времени для запуска, он может заметно задержать появление содержимое компонента.

+0

Я пытаюсь изменить DOM (выделить строку) после LOAD на стороне клиента. Response.js работает нормально, если только компонентный вид не кэшируется. В этом случае он не отправляется. Ajax: complete получает триггер, но, как вы уже упоминали, он запускает * до *, содержимое добавляется в DOM. Который отменяет мои модификации. Есть ли способ изменить контент до его применения? – sherve

 Смежные вопросы

  • Нет связанных вопросов^_^