web2py:如何检测 LOAD 组件何时通过 ajax 加载?

web2py: how to detect when an LOAD component has loaded via ajax?

我正在使用 {{=LOAD(...)}} 将组件注入我的 web2py 页面,如 http://web2py.com/books/default/chapter/29/12/components-and-plugins#LOAD 所述,但我需要在组件加载后触发一些 javascript。通常,如果通过 ajax 加载某些内容,则会有一个成功回调。我如何通过 web2py 中的 {{=LOAD(...)}} 设置其中之一?

最简单的方法是在组件的控制器中设置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 header 的存在表示 Ajax 响应是一个组件。

最后一种方法的唯一缺点是事件处理程序将在之前将组件的内容添加到DOM,因此如果事件处理程序需要很长时间 运行,它可能会明显延迟组件内容的出现。