#javascript #server-sent-events
Вопрос:
У меня есть следующий код для EventSource
объекта :
var sse = {};(function(s){
var es = { sseinit:false },
handle = function(){};
s.init = function (url) {
if (es.sseinit !== undefined) {
// condition for compilation error
es = typeof EventSource === 'function' || typeof EventSource === 'object' ?new EventSource(url) :{};
}
};
s.close = function () {
if (es.sseinit === undefined) {
es.close();
es = { sseinit:false };
}
};
s.addEventListener = function (name,callback) {
handle = function(e) {
callback(e,JSON.parse(e.data));
};
console.log('addEventListener :: ' name);
es.addEventListener(name,handle);
};
s.removeEventListener = function (name) {
if (es.sseinit !== false) {
console.log('removeEventListener :: ' name);
es.removeEventListener(name,handle);
}
};}(sse));
Когда мы вызываем es.removeEventListener
событие, оно не удаляется, как removeEventListener
не существует для EventSource
объекта.
Ответ №1:
Я обнаружил, что это эталонная проблема
var sse = {}; (функция(функции){
var es = { sseinit:false };
s.init = function (url) {
if (es.sseinit !== undefined) {
es = typeof EventSource === 'function' || typeof EventSource === 'object' ?new EventSource(url) :{};
}
};
s.close = function () {
if (es.sseinit === undefined) {
es.close();
es = { sseinit:false };
}
};
s.addEventListener = function (name,callback) {
this['handle' name] = function(e) {
callback(e,JSON.parse(e.data));
};
es.addEventListener(name,this['handle' name]);
};
s.removeEventListener = function (name) {
if (es.sseinit !== false) {
es.removeEventListener(name,this['handle' name]);
}
}; }(sse))
Я использовал «это[‘дескриптор’ имя]», чтобы сохранить контекст для определения функции дескриптора.