2016-11-18 102 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