Alors que c'est un vieux post, je voulais ajouter quelque chose à la conversation pour l'avenir Googlers.
L'OP est correct que nous ne pouvons pas déclarer des fonctions dans le plus pur CoffeeScript (à l'exclusion de l'idée de l'utilisation de l'arrière-tiques pour échapper à la pure JS à l'intérieur de la CoffeeScript fichier).
Mais ce que nous pouvons faire est de lier la fonction de la fenêtre, et essentiellement de la fin de quelque chose qu'on peut l'appeler comme si c'était un nom de fonction. Je ne suis pas à l'indiquer, est un nom de fonction, je suis en fournissant un moyen de faire ce que j'imagine de l'OP veut réellement faire (appel d'une fonction comme foo(param) quelque part dans le code) à l'aide de pure CoffeeScript.
Voici un exemple d'une fonction attachée à la fenêtre en coffeescript:
window.autocomplete_form = (e) ->
autocomplete = undefined
street_address_1 = $('#property_street_address_1')
autocomplete = new google.maps.places.Autocomplete(street_address_1[0], {})
google.maps.event.addListener autocomplete, "place_changed", ->
place = autocomplete.getPlace()
i = 0
while i < place.address_components.length
addr = place.address_components[i]
st_num = addr.long_name if addr.types[0] is "street_number"
st_name = addr.long_name if addr.types[0] is "route"
$("#property_city").val addr.long_name if addr.types[0] is "locality"
$("#property_state").val addr.short_name if addr.types[0] is "administrative_area_level_1"
$("#property_county").val (addr.long_name).replace(new RegExp("\\bcounty\\b", "gi"), "").trim() if addr.types[0] is "administrative_area_level_2"
$("#property_zip_code").val addr.long_name if addr.types[0] is "postal_code"
i++
if st_num isnt "" and (st_num?) and st_num isnt "undefined"
street1 = st_num + " " + st_name
else
street1 = st_name
street_address_1.blur()
setTimeout (->
street_address_1.val("").val street1
return
), 10
street_address_1.val street1
return
C'est à l'aide de Google Places à l'adresse de retour d'informations pour remplir automatiquement un formulaire.
Nous avons donc une partielle dans une application Rails, qui est chargé dans une page. Cela signifie que le DOM est déjà créé, et si nous appelons la fonction ci-dessus sur le chargement initial de la page (avant l'appel ajax rend l'partielle), jQuery ne verrez pas le $('#property_street_address_1') de l'élément (croyez-moi - il n'a pas).
Nous avons donc besoin de retarder la google.cartes.des lieux.La saisie semi-automatique() jusqu'à ce que l'élément est présent sur la page.
On peut le faire via l'Ajax de rappel sur le succès de la charge de la partielle:
url = "/proposal/"+property_id+"/getSectionProperty"
$("#targ-"+target).load url, (response, status, xhr) ->
if status is 'success'
console.log('Loading the autocomplete form...')
window.autocomplete_form()
return
window.isSectionDirty = false
Donc, ici, essentiellement, nous faisons la même chose que d'appeler foo()