Я играл с javascript с событиями в последнее время и задавался вопросом, хорошо ли это для объектов, которые слушают их собственные события, как способ абстрагирования и упрощения внутренней логики.Объекты Javascript, слушая их собственные события
Рассмотрим следующий пример:
function MyModule(options) {
this.options = options;
this.data = {};
this.setListeners();
//...
}
MyModule.prototype = new EventEmitter;
MyModule.prototype.constructor = MyModule;
MyModule.prototype.updateBasket = function() {
var self = this,
url = this.options.url;
$.ajax(url)
.done(function(data) {
self.emit('basketupdate:success', data);
})
.fail(function(jqxhr, textStatus, err) {
self.emit('basketupdate:error', err);
})
.complete(function() {
self.emit('basketupdate:complete');
});
};
MyModule.prototype.setListeners = function() {
var self = this;
this.on('basketupdate:success', function(data) {
// ... do something on success
self.data = data;
});
this.on('basketupdate:success', function(data) {
// ... do something else on success
console.dir(data);
});
this.on('basketupdate:error', function() {
// ... do something to handle the error
});
};
var module = new MyModule({
url: '/path/to/request'
});
module.updateBasket();
Простой модуль с AJAX запроса. Я мог бы легко поместить всю логику в соответствующий обратный вызов или даже отобразить обратные вызовы во внутренние методы. Однако мне очень нравится такой подход к упрощению кода.
Есть ли недостатки или потенциальные проблемы для структурирования кода так, как я не рассматривал. Или это будет рассматриваться как анти-шаблон с событиями, предназначенными только для прослушивания из других мест?
Возможно, вам стоит рассмотреть вопрос об этом по адресу http://codereview.stackexchange.com/. Я не вижу потенциальных проблем с этим кодом. Выпуски событий, которые прослушиваются самим модулем и снаружи, выполняются также в нескольких библиотеках jQuery. – migg
Спасибо - я не знал о codereview! Я разместил это там. – leepowell