`!` в имени события
Следующий код довольно часто можно видеть, если используется библиотека jQuery:
$('#foo')
.bind('click', function(){ console.log('click event') })
.bind('click.my', function(){ console.log('click.my event') }); //namespaced event
//потом это обработчики могут вызываться...
console.log('step 1');
$('#foo').trigger('click');
console.log('step 2');
$('#foo').trigger('click.my');
Результатом этих вызовов будет вывод в консоль следующего:
step 1
click event
click.my event
step 2
click.my event
Это хорошо известно, про это написано в доках по jQuery и это понятно. А вот про что там не написано, это про то, что можно написать так:
console.log('step 3');
$('#foo').trigger('click!');
(обратите внимание на восклицательный знак в имени ивента). И вот тогда в консоле мы увидем такое:
step 2
click event
И все. Т.е. вывода click.my event мы не увидим. Если посмотерть в исходники jQuery, то там это выглядит так:
...
if ( type.indexOf("!") >= 0 ) {
event.type = type = type.slice(0, -1);
event.exclusive = true;
}
...
т.е. это некий вариант exclusive событий. И этим, в частности, пользуется плагин DataLink, изучение исходников которого (на предмет “переделать для себя”) и всплыло это странное exclusive.


