2014-06-09 2 views
1

Coffeescript에서 객체의 관련 요소 배열에 대한 이벤트 리스너를 초기화하려고합니다. 그것은 내가하고있는 것처럼 작동하지만 JSHint (합법적으로) 루프 내에서 함수를 만드는 것에 대해 불평하고있다.루프 내에서 Coffeescript 클로저로 JSHint "함수를 루프 내에서 수행하지 않기"

나는 조금 놀았지만 주위를 둘러 볼 방법이 없습니다. 나는 항상 오류 메시지를 비활성화 할 수 있지만 그 이유가 있습니다. 루프 내부에서 익명의 기능을 사용하지 않고이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 그것이 밖으로 배변 obj를

bindHover = (obj) -> 
    for obj in objArray 
    if obj.el 
     do() -> bindIt(obj) 

bindIt = (obj) -> 
    obj.el.addEventListener('mouseenter', (event) -> obj.on()) 
    obj.el.addEventListener('mouseleave', (event) -> obj.off()) 

난 그냥 do bindIt(obj)하지만 첫 번째 이후를 시도했습니다. 당신은 몇 가지 아이디어를 테스트해야하는 경우

나는

답변

2

http://jsbin.com/qimor/2/edit 당신은 실제로이 경우 do 필요하지 않습니다, 그것을 위해 JSBin을 설정합니다.

bindHover = (obj) -> 
    bindIt(obj) for obj in objArray when obj.el 

을하고 문제가 사라집니다 : bindIt에 대한 귀하의 호출이 이미 당신을위한 참조를 나누기는 그래서 당신은 말을 바로 할 수 있습니다.

업데이트 데모 :

for obj in objArray when obj.el 
    do (obj) -> ... 
    #---^^^ 

것은 생산해야 do - 내부-A-루프의 일반적인 형태 do가 생성하는 익명 함수 루프 변수를 전달하는 또 http://jsbin.com/xebudowo/1/edit

, 표준 JavaScript 관용구 :

for(...) { 
    (function(obj) { ... })(obj) 

아마도 JSHint는 인식하기에 충분히 똑똑합니다.

+0

설명해 주셔서 감사합니다. 나는 지금 그것을 검사하고 있고 시험 후에 받아 들여진 것으로 갱신 할 것이다. –