2012-01-15 11 views
20

Lavorando alla riscrittura del front-end del mio sito in Coffeescript. Capisco come associare una funzione di clic a una classe.CoffeeScript - Collegamento Fare clic sugli eventi per caricare dinamicamente oggetti con JQuery On

$('.song').click -> 
    //code 

Tuttavia, sto riscontrando alcuni problemi con il contenuto caricato in modo dinamico. So che nel JQuery, la soluzione a questo sarebbe quella di utilizzare la funzione "On" in questo modo:

$(document).on('click', '.song', function(){ 
    //code 
}); 

Ma io sono sicuro su come questo si traduce in CoffeeScript. Ho l'impressione che la freccia del razzo -> si traduca in una funzione anonima in javascript, ma come funziona se la funzione è uno dei parametri? Ho provato un po 'di sintassi diversa e nessuno di loro sembra funzionare, grazie!

risposta

15
$(document).on('click', '.song', (-> 
    ### code ### 
)); 

si traduce in questo JavaScript:

$(document).on('click', '.song', (function() { 
    /* code */ 
})); 

noti che si consiglia di utilizzare l'operatore => invece di ->; usando la doppia freccia si lega anche this al gestore di eventi (equivalente all'utilizzo di jQuery bind).

+0

@Epeli, mentre la modifica è anche una possibilità che non è la mia preferenza. A seconda del contenuto della funzione, CS ha difficoltà a trovare la fine, che viene risolta inserendo le parentesi esplicitamente. Trovo fastidiose le ambiguità in CS; '$ (document) .on' per esempio restituisce' on'without invocandolo, 'do $ (document) .on' lo invoca,' $ (document) .on something' anche lo invoca, e 'do $ (document) . In qualche cosa invocherà il risultato. L'uso di parentesi graffe per argomenti rende questa muss meno incline agli errori IMHO. Quindi modificherò di nuovo. Sentiti libero di postare il tuo - lo inviterò. ;) – Lucero

+0

Roger e mi dispiace. Sembra una modifica piuttosto ovvia visto che raramente vedi il codice CS con parentesi se l'ordine di esecuzione del codice è chiaro. Come in questo banale esempio. – Epeli

+0

@Epeli, abbastanza giusto, motivo per cui mi sono spiegato. Avendo migliaia di linee di codice CS in esecuzione in una SPA modulare e vedendo i miei sviluppatori in difficoltà con alcuni dei comportamenti spiegati, ho deciso di richiedere i paren per le invocazioni dei metodi nella mia organizzazione, allo stesso tempo sto impedendo l'uso di 'do '. Questo infatti aiuta a mantenere alta la qualità del codice, specialmente durante la manutenzione del codice. – Lucero

4

JS2Coffee può aiutare con questo tipo di domande:

http://js2coffee.org/

Hai bisogno di essere un po 'attenti con js2coffee, come a volte inciampa sul codice JS abbastanza difficile, ma è sorprendentemente preciso, e lo farà di solito almeno ti avvicini abbastanza.

21

In genere uno non usa parentesi in CoffeeScript se l'ordine di esecuzione è chiaro senza di essi. Quindi questo può essere scritto in questo modo:

$(document).on 'click', '.song', -> 
    ### code ### 

ma naturalmente staffe uso sempre quando l'ordine di esecuzione non è evidente.

+0

Questa dovrebbe essere ** la ** risposta! – mlt

Problemi correlati