2009-06-20 2 views
5

Я хотел бы попробовать новую библиотеку JavaScript. Пользуясь (и любимым) j Query 1.3's "Live" events, я бы предпочел следующую библиотеку, в которой я пытаюсь включить событие в систему событий. Wikipedia's JS Library Comparison падает на работу здесь.В каких библиотеках JavaScript есть делегирование событий?

Похож на MooTools is getting it in 2.0. А как насчет других?

Я создаю эту вики сообщества. Пожалуйста, помогите мне заполнить список.

Прототип: нет

JQuery: от 1,3

MooTools: от 2,0

ExtJS: да

ответ

2

делегация события проще, чем вы думаете.

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

+0

ОК. Тогда в каких библиотеках нет делегирования событий? :-) – Nosredna

2

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

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

+0

Я перечислил Prototype с «нет» в диаграмме. – Nosredna

1

Если вы любите использовать JQuery, но придумываете что-то другое, я бы пошел с mootools, ссылка на плагин делегирования событий Aarons плюс его учебник о том, как использовать оригинал, должны дать вам все, что вам нужно. Существует много дискуссий о том, что в конце концов лучше, чем вы предпочитаете.

Mootools отлично подходит и имеет хорошие плагины, вы также должны проверить Дэвида Уолша, который делает много mootools dev и некоторых JQuery. Он публикует интересные материалы. http://davidwalsh.name

+0

Я собираюсь попробовать MooTools, как только появится 2.0, который, я думаю, скоро. – Nosredna

1

Событие, связанное с делегацией, предназначено только для размещения обработчиков событий далее по дереву DOM. Все рамки могут/должны быть в состоянии сделать это. Обработчики должны иметь возможность отображать любое событие, которое пузырится. Событие содержит элемент, который вызвал его, и от этого обработчик может делать что угодно.

Прототип не имеет каких-либо событий, связанных с сахаром, родным для библиотеки, который работает как jQuery's $.fn.live, но довольно просто построить функцию, которая ловит события и наполняет их целевыми элементами.

document.observe('click',function(event){alert(event.element().inspect())}) 

Вы можете использовать это, чтобы сделать клон JQuery, Живой довольно легко (я не говорю, что это будет хорошо или что-нибудь).

live = function(selector,callback){ 
    document.observe("click",function(e){ 
    var element = e.element() 
    if (!element.match(selector)) 
     element = element.ancestors().find(function(elem){return elem.match(selector)}); 
    else 
     element = null 
    if (element) 
     callback.apply(element) 
    }) 
} 

Вы могли бы назвать это нравится:

live("div",function(){this.setStyle({color:'blue'})}) 

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

+0

Я составляю список, которые добавляют сахар. – Nosredna

+0

Правда. Но я подумал, что было бы интересно попробовать переопределить live в Prototype, чтобы понять, насколько это будет легко. Оказывается, довольно легко. – BaroqueBobcat

1

Ext Js всегда верю.

+0

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

Смежные вопросы