これは古い投稿ですが、将来のGoogle社員のために会話に何かを追加したいと思いました。
OPは、純粋なCoffeeScriptで関数を宣言できないという点で正しいです(CoffeeScriptファイル内の純粋なJSをエスケープするためにバックティックを使用するという考えを除く)。
しかし、私たちにできることは、関数をウィンドウにバインドすることであり、基本的に、名前付き関数であるかのように呼び出すことができるものになります。これが名前付き関数であるとは言っていません。純粋なCoffeeScriptを使用して、OPが実際に実行したいこと(コードのどこかでfoo(param)のような関数を呼び出す)を実行する方法を提供しています。
以下は、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
これは、Googleプレイスを使用して住所情報を返し、フォームに自動入力します。
つまり、ページにロードされているRailsアプリにパーシャルがあります。これは、DOMがすでに作成されていることを意味し、最初のページの読み込み時に(ajax呼び出しが部分をレンダリングする前に)上記の関数を呼び出すと、jQueryは$('#property_street_address_1')要素を認識しません(信頼してください-それはしませんでした ' t)。
そのため、要素がページに表示されるまでgoogle.maps.places.Autocomplete()を遅らせる必要があります。
パーシャルのロードが成功すると、Ajaxコールバックを介してこれを行うことができます。
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
したがって、ここでは、基本的に、foo()を呼び出すのと同じことを行っています。