이전 게시물이지만 향후 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') 요소를 볼 수 없습니다. 티).
따라서 요소가 페이지에 표시 될 때까지 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 ()를 호출하는 것과 같은 일을하고 있습니다.