...

суббота, 12 июля 2014 г.

[Перевод] Pub/Sub JavaScript объект

Перевод статьи «Pub/Sub JavaScript Object», David Walsh

Есть три техники написания AJAX веб-сайтов: делегация событий, управление историей и коммуникация pub/sub на уровне приложения. Я использую все три техники и я хотел бы поделиться с вами самой простой из них: крошечным pub/sub модулем, который я использую на своем веб-сайте.


Если вы не знаете, что такое pub/sub, то суть в том, что вы публикуете в некую тему(topic), и кто угодно может на нее подписываться. Это похоже на то, как работает радио: радиостанция вещает (публикует) и каждый может слушать (подписываться). Это превосходный подход для модульных веб-приложений; это способ глобальной коммуникации без привязки к какому-то конкретному объекту.



JavaScript




Сам по себе модуль очень миниатюрный, но очень полезный:

var events = (function(){
var topics = {};

return {
subscribe: function(topic, listener) {
// создаем объект topic, если еще не создан
if(!topics[topic]) topics[topic] = { queue: [] };

// добавляем listener в очередь
var index = topics[topic].queue.push(listener) -1;

// предоставляем возможность удаления темы
return {
remove: function() {
delete topics[topic].queue[index];
}
};
},
publish: function(topic, info) {
// если темы не существует или нет подписчиков, не делаем ничего
if(!topics[topic] || !topics[topic].queue.length) return;

// проходим по очереди и вызываем подписки
var items = topics[topic].queue;
items.forEach(function(item) {
item(info || {});
});
}
};
})();




Публикуем в тему:

events.publish('/page/load', {
url: '/some/url/path' // любой аргумент
});




… подписываемся на тему, чтобы получать уведомления о событиях:

var subscription = events.subscribe('/page/load', function(obj) {
// делаем что-нибудь, когда событие происходит
});

// ...теперь мне эта подписка больше не нужна...
subscription.remove();




Я скрупулезно использую pub/sub religiously на своем веб-сайте, и этот объект сделал мне кучу добра. У меня есть тема на загрузку страницы через AJAX и несколько подписок, которые вызываются при этом событии (перерисовка рекламы, комментариев, социальных иконок, и тд.). Проверьте, где в вашем приложении можно использовать pub/sub!

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий