jQuery lier les événements avec des Rails/Coffeescript?
Donc dans app/assets/javascript/faye.js.coffee.erb
j'ai le texte suivant:
$('#room_tag').bind('blur', () ->
alert('Hey!')
)
Tous les autres dans le code comme: sendmessage('room', 'message')
fonctionnent tout aussi bien. Et je peux copier et coller le code généré dans le bloc ci-dessus et coller dans google Chrome, il fonctionne très bien. Je suppose que c'est parce que, est-il de rails ou de coffeescript?, de toute façon l'un d'entre eux, des enveloppements l'intégralité du fichier:
(function() {
//your generated code here
}).call(this);
Aussi y aurait-il arriver à être pour moi un moyen d'accéder à des méthodes qui sont définies à l'intérieur? Est-il possible de définir une méthode de là sans l'affecter à une variable?
Je ne sais pas, j'ai juste vu et... je voulais un peu de café...
La deuxième partie de cette question est fondamentalement un double de stackoverflow.com/questions/5211638/... Voir ma réponse il y a, en expliquant le wrapper. (Mais dans ce cas, l'emballage n'est pas à l'origine du problème, comme Pierre le dit dans sa réponse.)
La deuxième partie de cette question est fondamentalement un double de stackoverflow.com/questions/5211638/... Voir ma réponse il y a, en expliquant le wrapper. (Mais dans ce cas, l'emballage n'est pas à l'origine du problème, comme Pierre le dit dans sa réponse.)
OriginalL'auteur Mohammad El-Abid | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
1) sont les Plus susceptibles de votre
.bind
appel est en cours d'exécution trop tôt, avant que le document est prêt et n'a donc pas faire n'importe quoi. L'envelopper dans un appel à$(document).ready
comme ceEt il y a effectivement un joli raccourci pour cela depuis jQuery par défaut de
$
fonction est un alias pour$(document).ready
, il vous suffit de faire:2) Il est coffeescript qui enveloppe le tout dans une auto-exécution de définition de la fonction.
3) Si vous voulez faire une fonction globale en coffeescript, affecter explicitement comme une propriété de la fenêtre globale de l'objet
2) & 3) sont clairement expliquées dans la CoffeeScript docs
The usual caveats about CoffeeScript apply — your inline scripts will run within a closure wrapper, so if you want to expose global variables or functions, attach them to the window object.
Exactement, sonne comme #1 est la réponse ici. Vous pouvez le confirmer en vérifiant
$('#room_tag').length
. Si c'est1
, l'élément existe au moment de la sélection; si c'est0
, il ne le fait pas.OriginalL'auteur