плагин jQuery для событийно-управляемой архитектуры?

Вы должны использовать встроенные классы загрузки bootstrap4 для настройки расстояния между элементами, что более удобно.

30
задан Community 8 February 2017 в 14:26
поделиться

4 ответа

Для этого вам, вероятно, не нужен плагин. Во-первых, сама модель DOM полностью управляется событиями. Вы можете использовать делегирование событий для прослушивания всех событий на корневом узле (метод, который использует jQuery live). Чтобы обрабатывать пользовательские события, которые могут не быть связаны с DOM, вы можете использовать простой старый объект JavaScript для выполнения этой работы. Я написал сообщение в блоге о создании центрального диспетчера событий в MooTools с помощью всего одной строчки кода.

var EventBus = new Class({Implements: Events});

Это так же легко сделать и в jQuery. Используйте обычный объект JavaScript, который действует как центральный посредник для всех событий. Любой клиентский объект может публиковать и подписываться на события этого объекта. См. Этот связанный вопрос .

var EventManager = {
    subscribe: function(event, fn) {
        $(this).bind(event, fn);
    },
    unsubscribe: function(event, fn) {
        $(this).unbind(event, fn);
    },
    publish: function(event) {
        $(this).trigger(event);
    }
};

// Your code can publish and subscribe to events as:
EventManager.subscribe("tabClicked", function() {
    // do something
});

EventManager.publish("tabClicked");

EventManager.unsubscribe("tabClicked");

Или, если вас не волнует раскрытие jQuery, просто используйте пустой объект и вызовите bind и триггер непосредственно для объекта, обернутого jQuery.

var EventManager = {};

$(EventManager).bind("tabClicked", function() {
    // do something
});

$(EventManager).trigger("tabClicked");

$(EventManager).unbind("tabClicked");

Обертки служат просто для того, чтобы скрыть базовую библиотеку jQuery, чтобы вы могли при необходимости заменить реализацию позже.

Это в основном шаблон Publish / Subscribe или Observer , и некоторые хорошие примеры - это класс Cocoa NSNotificationCenter , EventBus паттерн, популяризированный Рэем Райаном в сообществе GWT и некоторыми другими.

48
ответ дан 27 November 2019 в 23:40
поделиться

Я использовал OpenAjax Hub для его сервисов публикации/подписки. Это не плагин jQuery, а отдельный модуль JavaScript. Вы можете скачать и использовать эталонную реализацию с SourceForge. Мне нравится иерархическое именование тем и поддержка подписки на несколько тем с использованием подстановочных знаков.

1
ответ дан 27 November 2019 в 23:40
поделиться

На самом деле их два:

2
ответ дан 27 November 2019 в 23:40
поделиться

Может ли это служить облегченной структурой передачи сообщений?

function MyConstructor() {
    this.MessageQueues = {};

    this.PostMessage = function (Subject) {
        var Queue = this.MessageQueues[Subject];
        if (Queue) return function() {
                                        var i = Queue.length - 1;
                                        do Queue[i]();
                                        while (i--);
                                    }
        }

    this.Listen = function (Subject, Listener) {
        var Queue = this.MessageQueues[Subject] || [];
        (this.MessageQueues[Subject] = Queue).push(Listener);
    }
}

тогда вы можете сделать:

var myInstance = new MyConstructor();
myInstance.Listen("some message", callback());
myInstance.Listen("some other message", anotherCallback());
myInstance.Listen("some message", yesAnotherCallback());

и позже:

myInstance.PostMessage("some message");

будет отправлять очереди

2
ответ дан 27 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: