Ты думал о pubsub?Что-то такое простое, как.
(function() {
var $obj = $(window);
window.pub = function(ev, data) {
$obj.trigger(ev, data);
};
window.sub = function(ev, f) {
$obj.bind(ev, f);
};
})();
или отбросить зависимость jQuery
(function() {
var $obj = {},
undefined;
window.pub = function(ev, data) {
if ($obj[ev] === undefined) {
return false;
}
for (var i = 0, len = $obj[ev].length; i < len; i++) {
$obj[ev][i](data);
}
};
window.sub = function(ev, f) {
if ($obj[ev] === undefined) {
$obj[ev] = [];
}
$obj[ev].push(f);
};
})();
Оба ampify.subscribe и Backbone.Events имеют определенныеобъекты для этого.Вы можете даже найти другие библиотеки с подобными объектами.Для этого есть даже библиотеки PubSub.js .
Пример:
$("table.sort th").click(function(e) {
...
window.pub("click.sortHeader", e);
});
...
$.fn.pagify = function(json) {
var table = $(this);
...
//enter code here
window.sub("click.sortHeader", function() {
// handle table sorting.
// adjust table pagifying plugin accordingly.
});
};
В общем pub
это trigger
, а sub
это bind
,В этом конкретном примере у нас есть два независимых плагина.Они не знают, находятся ли они на той же странице или вообще разговаривают.Но так как сортировка «ломает» пейджинговый плагин на нашей таблице, у нас есть подписка на «сортировку» события, чтобы исправить нашу подкачку страниц.
Кто-то другой может предложить лучший пример.По сути, это просто способ передачи сообщений без каких-либо предположений о том, существует ли получатель или получатель сообщения.