Специальная библиотека событий для 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"
Я мог бы написать что-то обычное, но я бы предпочел использовать библиотеку с открытым исходным кодом, если он есть.
Приветствия.
Ответы
Ответ 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, чтобы использовать его.