0

가변 수의 드래그 가능한 요소를 반복 실행하는 for 루프가있어서 각각에 대해 stop-event 콜백을 생성합니다. 콜백 함수는 링크 된 항목의 인덱스를 알아야합니다.for 루프에서 jquery draggable "stop"콜백을 생성합니다.

콜백 문제가 발생했습니다. 콜백이 해제되면 콜백 (_x)에 전달 된 루프 반복기 인덱스 변수의 상태가 루프 반복기 인덱스의 마지막 값이며, 콜백 함수가 정의 된 시점의 iterator 인덱스 값보다 아래 일부 커피 스크립트 : 위의 예에서

for _x in [0..total] 
    $(window).ready $(".draggable-#{_x}").draggable 
    cursor: 'move' 
    handle: ".draggable-image-move-button-#{_x}" 
    containment: 'div#banner-builder-preview' 
    stop: => 
     alert "x === #{_x}" 

는 경고 메시지가 항상 "X === 총 + 1"이 아니라 "X의 === 0", "X === 1"을 출력합니다 .. .

stop 이벤트가있는 각 요소에 대해 콜백에 고유 인덱스를 전달하는 가장 좋은 해결책은 무엇입니까? 콜백을 끈 모든 요소에서 더 많은 데이터를 가져 오는 또 다른 jquery 선택기를 사용하지 않고이 작업을 수행하는 것이 좋습니다.

UPDATE :

지금 실행 해요 또 다른 문제 : 내, 내 콜백 루프를 들어, 파일에 정의 된 다른 기능을 볼 수 없습니다. 나는 익명의 콜백 함수를 만들기 위해 for 루프가 사용되기 전에 정의가 발생하더라도 매우 이상하다고 생각한다. 예를 들어

는 :

stop: => 
    alert "x === #{_x}" 

모든 _x를 참조 끝날하지만이 전화를받을 때까지이 _x을 평가하지 않습니다

for _x in [0..total] 
    do (_x) -> 
    $(window).ready $(".draggable-#{_x}").draggable 
     cursor: 'move' 
     handle: ".draggable-image-move-button-#{_x}" 
     containment: 'div#banner-builder-preview' 
     stop: => 
     someFunction _x # ... this line throws an exception, not defined 
     alert "x === #{_x} 

답변

1

문제는 콜백이 있다는 것입니다. 그 때까지 _x의 값은 total + 1입니다. 이 커피 스크립트가 도움이 do keyword을 갖도록 일반적인 문제 :

함수를 생성하는 자바 스크립트 루프를 사용하면 변수를 통해 폐쇄되는 루프를 보장하기 위해 폐쇄 래퍼를 삽입하는 것이 일반적이다, 모든 생성 된 함수는 최종 값을 공유하지 않습니다. CoffeeScript는 전달 된 함수를 즉시 호출하고 인수를 전달하는 do 키워드를 제공합니다.

그래서 대신 이런 말을 할 수

for _x in [0..total] 
    do (_x) -> 
    $(window).ready $(".draggable-#{_x}").draggable 
     #... as before 
+0

을 내가 찾던 정확히 무엇을! 많은 감사 – BBnyc

+0

다른 이상한 문제로 ... 위의 편집 된 질문을 참조하십시오. – BBnyc

+0

저에게 또 다른 질문처럼 보입니다.'someFunction'이 정의 된 방법과 장소, jsfiddle.net에서의 약간의 데모를 볼 필요가 있습니다. –