2011-02-01 9 views
5

prostu biegł jakiś jQuery, który wygląda tak:Wygląda na to, że jest klasą zdarzenia JavaScript. Co to jest?

$('.add-row').live('click.add', function() { 
    // do something 
} 

Wydaje się to wiąże z 'click.add' wydarzenie. Używam własnych zdarzeń i uważam, że są niesamowite, ale wykonanie git grep na naszej bazie kodu nie ujawnia żadnego miejsca, w którym wywołane jest niestandardowe zdarzenie o nazwie click.add, a w każdym przypadku to zachowanie jest wywoływane przez normalne kliknięcie. Ani nie widzę klasy .add w dowolnym miejscu w kodzie HTML.

Nie sądzę, że można prowadzić zajęcia z JavaScriptem. Masz pojęcie, co to za dziwna część składni?

Odpowiedz

5

To jest opisywany pod nazwą namespaced events. W tym przykładzie add jest przestrzenią nazw. Jest to skutecznie klasa zdarzeń, dzięki czemu można je kategoryzować i odpowiednio obsługiwać/uruchamiać. Na przykład, można napisać wtyczki i dać każdemu obsługi zdarzeń przestrzeni nazw z myPlugin tak, że można je rozwiązać bez usuwania innych programów obsługi zdarzeń przez użytkownika:

$('a').bind('click.myPlugin', function(){ /*...*/ }); // bind with the myPlugin namespace 
$('a').bind('click'), function() { /* ... */ }); // bind without a namespace 
$('a').unbind('.myPlugin'); // only removes the first function 

Działa to dla trigger również.

+0

Świetny przykład! Aktualnie pracuję nad wtyczką jQuery, która może skorzystać z tej techniki. Dzięki za pokazanie nie tylko tego, co to jest, ale dlaczego ktoś może z niego skorzystać. –

7

Zobacz http://api.jquery.com/event.namespace/ a zwłaszcza http://api.jquery.com/bind/:

Jeśli łańcuch eventType zawiera znak okres, to zdarzenie jest przestrzeni nazw (.). Znak okresu oddziela zdarzenie od jego przestrzeni nazw . Na przykład w wywołaniu .bind ('click.name', handler), ciąg znaków jest typem zdarzenia, a nazwa ciągu jest przestrzenią nazw. Namespacing pozwala nam się rozpinać lub wywołać niektóre zdarzenia typu bez numeru wpływając na innych. Zobacz dyskusję funkcji .unbind(), aby uzyskać więcej informacji.