2014-07-24 2 views
4

레일 및 coffeescript로 시작하지만 현재 이상한 문제가 있습니다. 나는 내 .coffee에서 다음과 같이 생성 된 로그라는 함수를 만들고 싶습니다 것은 :onclick 속성 안에 coffeescript create 함수를 사용하십시오.

log = (message) -> console.log message 

그것은이 같은 JS로 번역 :

(function() { 
    var log; 

    log = function(message) { 
    return console.log(message); 
    }; 

    log('Podcast downloader 2000'); 

}).call(this); 

이 나는대로 함수를 호출하는 경우 예제에서 호출, 그것은 작동합니다. 하지만 지금은 onclick을 = "로그 ('AVB')

<span onclick="log('abc')"/> 

를 사용하여 전화를 걸하지만 기능은 올바른 범위에없는, 그래서 호출되지 않습니다.

어떻게 내가 그렇게 내가 온 클릭 속성에서 함수를 호출 할 수 있습니다 코드를 변경?

감사합니다! 코멘트 섹션에서 스털링에 의해 제안

+1

인라인 이벤트 처리는 좋지 않습니다. 'eventListener'를 사용하십시오. 그리고 그 기능을 끌어 올리는거야? –

답변

4

, 그것은 onclick를 사용하는 것이 좋습니다 아니지만 당신이 정말로이 작업을 수행해야하는 경우, 전역 네임 스페이스에 함수를 배치한다.

window.log = (message) -> console.log(message) 

이와 같은 경우에는 앱의 네임 스페이스를 만들고 여기에 기능을 추가하는 것이 좋습니다.

@MyNamespace = {} 

class MyNamespace.CommonFunctions 
    @log = (message) -> console.log(message) 

그런 다음보기

<span onclick='MyNamespace.CommonFunctions.log("abc")'> 

에서이 조직 일을 유지하고 글로벌 네임 스페이스를 방해하지 않습니다.

LISTENER 접근

이 작업을 수행하는 더 좋은 방법은 (jQuery를 사용하여) 이벤트 리스너를 사용하는 것입니다.

# view 
<span class='msg'></span> 

# js 
log = (message) -> console.log(message) 

$('.msg').on 'click', -> log('abc') 
관련 문제