2013-05-03 2 views
1

Agility.js documentation, кажется, довольно ясно говорят, что объекты находчивость может принимать любые действительные JQuery тип события:Agility.js + jQueryUI, передать параметры обработчиков событий в контроллере

Обычные DOM события, такие как щелчок, DblClick, MouseEnter , и т. д. поддерживаются через API событий jQuery. Для получения списка поддерживаемых событий обратитесь к API jQuery.

Но в документах и ​​во всех других примерах, которые я видел, все функции контроллера, связанные с событиями, не принимают никаких параметров. Например, следующий фрагмент взят прямо из the online docs:

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', { 
    'click &': function() { 
    this.model.set({msg:"I've been clicked!"}); 
    } 
}); 
$$.document.append(button); 

Здесь лямбда, присоединенную к click случае, очевидно, без параметров. Это работает нормально для обычных событий jQuery, но для использования событий jQueryUI каждая функция события имеет связанные данные. Например, если я хочу использовать Draggable и Droppable виджеты, функция drop() вызывается в Droppable, чтобы указать, что на нее был удален Draggable, и мне нужны параметры drop(event, ui), чтобы выяснить, какой Draggable был.

Есть ли способ объявить обработчики событий контроллера, чтобы я мог получить доступ к этим параметрам? В качестве альтернативы, есть ли другой способ сделать то, что я пытаюсь сделать? Не получение какой-либо информации о событии на контроллере, отличном от «уволенного», кажется настоящим недостатком. Я даже не уверен, что можно расширить Agility, чтобы он мог обрабатывать события, отличные от стандартных DOM, хотя я не вижу причин, почему это не должно быть, из моего чтения кода.

Agility предоставляет функцию trigger() для кода клиента для запуска событий, что позволяет использовать параметры, отличные от типа события. Я подумал о том, чтобы как-то подключиться к событию jQueryUI, но я не понимаю, как это сделать. Более того, почему вы можете передавать параметры до trigger(), если контроллеры не могут их увидеть?

ответ

1

Что пример не показывает, что это несчастливо, но это не значит, что аргумент отсутствует.

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', { 
    'click &': function(jqEvent) { 
    this.model.set({msg:"I've been clicked!" + jqEvent.target.nodeName}); 
    } 
}); 
$$.document.append(button); 

Если вы сомневаетесь просто включить в обработчиков событий в console.log(arguments) и посмотреть на себя. Вы получите те же аргументы, которые дает jQuery.

Если вы экспериментируете с .trigger() и дополнительными параметрами, вы обнаружите, что сюрпризов нет.

+1

Спасибо, это работает отлично! Оказывается, параметры 'event' и' ui' передаются прямо в обработчик событий контроллера Agility, поэтому подключение jQueryUI виджетами не отличается от простых jQuery. – dodgethesteamroller

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