Захотелось сделать более правильную работу с триггерением/навешиванием обработчиков на события, чем это реализовано в jquery-ui. При этом сам функционал надоело копировать из виджета в виджет. В общем, вот простой добавить методы к своим виджетам:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
( function ( $ )
{
"use strict" ;
/**
* расширение базового функционала jquery-ui
*/
$ . widget ( "my.my_extension" , {
_triggerSmart : function ( EventName , Data )
{
var me = this ;
var $ me = $ ( me . element ) ;
$ me . trigger ( EventName + '.' + me . widgetName , Data ) ;
return me ;
} ,
_bindSmart : function ( EventName , Handler )
{
var me = this ;
var $ me = $ ( me . element ) ;
// боремся с повторным навешиванием обработчика
var events = $ . data ( $ me . get ( 0 ) , 'events' ) ;
var filteredEvents = [ ] ;
if ( EventName in events )
{
filteredEvents = $ . grep ( events [ EventName ] , function ( Event ) {
return Event . type == EventName && Event . namespace == me . widgetName ;
} ) ;
}
if ( ! filteredEvents . length ) {
$ me . bind ( EventName + '.' + me . widgetName , Handler ) ;
}
return me ;
}
} ) ;
} ( jQuery ) ) ;
Потом для каждого виджета нужно будет указать опциональный второй параметр
$ . widget ( "my.fast_search" , $ . my . my_extension ,
{
options :
{
. . .
Внимание нужно обратить на второй параметр $.my.my_extension, который в …
Read more