2011-09-08 46 views
0

我有一個Javascript類aaa,它通過CGI異步加載嵌入式Linux板上的數據。編寫JavaScript事件以傳遞給繼承的JavaScript類

我已經有需要從aaa

請求服務器數據功能的繼承類aaa.bbb我目前通過

document.addEventListener('DOMContentLoaded', aaa.methods.init, false); 
document.addEventListener('DOMContentLoaded', bbb.methods.init, false); 

initiliase兩個班我真正想要的是這樣的:

document.addEventListener('DOMContentLoaded', aaa.methods.init, false); 
document.addEventListener('aaa.onServerDataLoaded', bbb.methods.init, false); 

但是,是否可以在我的aaa庫中編寫函數,當第一個服務器數據是異步加載其他庫是否初始化?

aaa.onServerDataLoaded怎麼看?

// The XHR callback 
function serverDataCallback(event) { 
    if ((event.target.readyState === 4) && (event.target.status === 200)) { 
     onServerDataLoad(); 
    } 
}; 

// The event to bubble up 
function onServerDataLoad() { 
    // Erm...?! :) 
}; 
+0

你的意思是你要加載的庫BBB收到或者是第一數據時,含BBB文件已加載和你想要對bbb執行初始化? – kioopi

+0

後者。 「aaa.bbb.js」文件包含在HTML頁面中。 'aaa'處理所有的異步服務器數據。 'aaa.bbb'在初始化時通過'aaa'請求客戶端數據。但是,如果'aaa'沒有收到來自服務器'aaa.bbb'的數據,初始化將失敗。因此,我想在'aaa'獲取服務器數據時調用'aaa.bbb'的初始化。我希望能夠將'aaa.bbb'初始化函數註冊爲'aaa'的一個監聽器,這樣當我開發'aaa.ccc'時,我可以添加它的初始化。我不知道這些問題是如何解決的,我從來沒有這樣做過! –

回答

1

您可以讓aaa發送自定義事件。

function serverDataCallback(event) { 
    if ((event.target.readyState === 4) && (event.target.status === 200)) { 
    var evt = document.createEvent("Event"); 
    evt.initEvent("onServerDataLoaded", true, true); 
    document.dispatchEvent(evt); 

    } 
}; 

然後,您實際上可以將一個或多個事件偵聽器綁定到此事件。

document.addEventListener('onServerDataLoaded', function(){ 
    bbb.init(); 
}, false); 

請注意,該功能可能並不適用於所有瀏覽器。大多數Javascript庫以某種X瀏覽器的方式提供類似的功能。

看一看MDN進行更深入的信息:

https://developer.mozilla.org/Creating_and_triggering_custom_events

+0

完美。我決定使用jQuery來實現x瀏覽器的兼容性。那裏需要看什麼? –

+0

http://api.jquery.com/category/events/ http://api.jquery.com/trigger/ – kioopi

+0

用於觸發和綁定。 '$(document).trigger('serverDataLoaded')''和'$(document).bind('serverDataLoaded',bbb.methods.init)'*編輯*:對不起,我沒有更新頁面並錯過了您的評論。謝謝@ kioopi! –

0

如果您使用的是JavaScript庫,爲什麼要檢查readyState和status? 無論我從你的查詢理解,你有兩個庫,我希望他們是Ajax庫說YUI(aaa.aaa)和jquery(aaa.bbb) ,所以你可以調用YUI AJAX請求的響應處理程序的jQuery初始化方法

YAHOO.util.Event.onDOMContentReady(function(){ 
//Code to initialize your YUI library (aaa.aaa) 
}); 

YAHOO.util.Connect.asyncRequest("POST", req, { 
"success" : function(){ 

//Call you jquery (aaa.bbb)initialization functions here 

} 
}); 

我希望這可以幫助你。