2016-11-18 97 views

回答

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(突出显示一行)。 response.js工作正常,除非组件视图被缓存。在这种情况下,它不会被发送。 ajax:complete会得到触发器,但正如你所提到的,它在内容被添加到DOM之前运行*。这解除了我的修改。有没有办法在应用内容之前修改内容? – sherve