Подтвердить что ты не робот

Специальная библиотека событий для JavaScript. Есть ли какие-нибудь? Рекомендации?

Я ищу библиотеку JavaScript, которая позволит мне использовать пользовательские события, на которые я могу подписаться и уйти. Мне также нужно, чтобы имя/область событий работали так же, как и темы в очереди сообщений, где вы можете подписаться на пространство имен и получить все события для этого пространства имен.

Например,

var myCustomEventHandler = new CustomEventHandler();

myCustomEventHandler.bind('my.event', function(data) { console.log('Event 1'); });
myCustomEventHandler.bind('my.other.event', function(data) { console.log('Event 2'); });
myCustomEventHandler.bind('my.*', function(data) { console.log('Event 3'); });

myCustomEventHandler.trigger('my.event');
// Logs "Event 1" and "Event 3"

myCustomEventHandler.trigger('my.other.event');
// Logs "Event 2" and "Event 3"

myCustomEventHandler.trigger('my.something.else');
// Logs "Event 3"

Я мог бы написать что-то обычное, но я бы предпочел использовать библиотеку с открытым исходным кодом, если он есть.

Приветствия.

4b9b3361

Ответ 1

У YII 2 есть что-то вроде этого, я предполагаю, что YUI 3 тоже, но я не смотрел на него достаточно подробно, чтобы узнать еще, EventEmitter, по-видимому, покрывает хотя бы некоторые из ваших требований и намного меньше. Некоторые из других библиотек на событиях microjs могут быть многообещающими.

Ответ 2

Отъезд bean. Это потрясающе.

Ответ 3

Я бы также рекомендовал взглянуть на js-signals

Вот пример с сайта:

//custom object that dispatch a `started` signal
var myObject = {
    started : new signals.Signal()
};
function onStarted(param1, param2){
    alert(param1 + param2);
}
myObject.started.add(onStarted); //add listener
myObject.started.dispatch('foo', 'bar'); //dispatch signal passing custom parameters
myObject.started.remove(onStarted); //remove a single listener

Ответ 4

Попробуйте RxJS.

Это предоставляет мощь Reactive Extensions и Linq в Javascript. Пример:

this.searcher = $(me._textboxSelector)
        .toObservable("keyup")
        .Select(function (_) {
            return $(me._textboxSelector).val();
        })
        .Where(function (str) {
            if (me._madeSomeHiding && str.length < me._minStringLength) {
                $(me._itemsSelector).show();
            }

Это позволяет создать фильтр в списке. Поэтому вы можете сказать, если пользователь набрал 2 символа и остановился на 250 мс, тогда сделайте что-нибудь.

Ответ 5

У меня была такая же проблема за один день, поэтому я создал супер-крошечную библиотеку, чтобы помочь мне с событиями. Проверьте это, возможно, вы найдете это полезным.

https://github.com/anvk/Events.js

var events = new utils.Events();

var callback1 = function() {...};
var callback2 = function(arg1, arg2) {...};

events.on('event A', callback1);
events.on('event B', callback2);

events.emit('event A');
events.emit('event B', [var1, var2]);

Ответ 6

Попробуйте KeyderJS:

Keyder(document.getElementById("my_element")).click(function(){
    alert("Mouse button pressed");
}, function(){
    alert("Mouse button released");
});

Ответ 7

Немного поздно, но вас может заинтересовать https://github.com/asyncly/EventEmitter2

Из описания:

Особенности

Namespaces/Wildcards.
Times To Listen (TTL), extends the once concept with many.
Browser environment compatibility.
Demonstrates good performance in benchmarks

Ответ 8

Библиотека событий JavaScript для всех событий jQuery предлагает без jQuery.

https://github.com/AtheistP3ace/jAwn

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

Это оставляет вам только конкретный код события и кеширование (которое необходимо для событий). Этот код был обновлен со всеми последними обновлениями jQuery 3.0 и исправлениями ошибок. Это может быть гарантировано только для работы с любыми браузерами, поддерживаемыми jQuery 3.0 (https://jquery.com/browser-support/). В общем, файл min - 13 кбайт и поддерживает все события jQuery. Пространства имен, пользовательские события, прямые и делегированные события, передача данных, запуск событий, вы называете это.

Прочитайте документы. Это довольно просто. Работает точно так же, как jQuery, вместо того, чтобы вызывать, выключать, запускать и т.д. На объекте jQuery вы передаете элемент в качестве первого аргумента.

Как я уже говорил, я сделал это для личного использования, поэтому его не какой-то проект, который я постоянно поддерживаю и обновляю, но я стараюсь держать его в курсе моих собственных применений и убедиться, что он имеет последние исправления. Я использую его много лет в нескольких проектах, и он отлично работает. Я только недавно положил его на GitHub, если другие считают его полезным.

Ответ 9

Я также предлагаю KeyderJS, так как это "простая, но мощная библиотека JavaScript". Я нашел и все еще считаю это очень полезным. Это облегчает мое кодирование. У него также много совместимости с браузерами.

Также вам не нужно знать, что JavaScript очень хорош для его использования, и вы можете быть новичком или экспертом JavaScript, чтобы использовать его.