Напишите событие JavaScript для передачи в унаследованный класс JavaScript - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть класс Javascript aaa, который асинхронно загружает данные с нашей встроенной платы Linux через CGI.

У меня есть унаследованный класс aaa.bbb, в котором есть функции, которые должны запрашивать данные у сервера у aaa

В настоящее время я инициализирую оба класса с помощью

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

Что я действительно хочу, так это:

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...?! :)
};

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

У вас может быть 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); 

  }
};

Затем вы можете привязать к этому событию одного или нескольких прослушивателей событий.функциональность может быть доступна не во всех браузерах.Большинство Javascript-библиотек предоставляют схожую функциональность в некотором смысле в x-браузере.

Посмотрите MDN для более подробной информации:

https://developer.mozilla.org/Creating_and_triggering_custom_events

0 голосов
/ 08 сентября 2011

Если вы используете библиотеку javascript, почему вы хотите проверить состояние ReadyState и статус?Из того, что я понял из вашего запроса, у вас есть две библиотеки, я надеюсь, что они являются Ajax-библиотеками, такими как YUI (aaa.aaa) и jquery (aaa.bbb), так что вы можете вызывать методы инициализации jquery для обработчика ответа YUI AJAX-запроса

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

}
});

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...