2010-01-07 4 views
0

내가 틀린 패턴을 사용하고 있을지 모르지만, 나는 누군가가 나를 고칠 수 있기를 바랍니다!JavaScript, MooTools 및 변수/객체 스코프

나는 서버 작업에 대한 응답으로 서버 작업에 대한 응답으로 div를 복제하고 속성 중 일부를 변경하고 작업 영역에 배치하고 draggable로 만들고 onComplete 작업을 추가하는 객체를 가지고 있습니다. 이 작업은 레이아웃 영속성을 위해 div의 업데이트 된 위치를 서버에 다시 보내도록 workspace 객체의 다른 메소드를 호출하기위한 것입니다.

나는 관련 방법에 이르기까지 클래스를 제거했습니다

var MooPanel = new Class({ 
    createDiv: function() { 
     var newDiv = existingDiv.clone(); 
     var dragHandle = newDiv.title; 

     var move = new Drag(newDiv, { 
      'handle': dragHandle, 
      'x': true, 
      'y': true, 
      /* original line: 
      'onComplete': function(el, dr) { updateCoordinates(el, dr); } 
      */ 
      /* working line: */ 
      'onComplete': function(el, dr) { this.updateCoords(el); }.bind(this) 
     } 
    }, 
    updateCoordinates: function(el, dr) { 
     send.to.server(); 
    } 
}); 

을 지금, 나는 문제가 내 updateCoordinates 메소드를 호출을 받고하는 데 문제가 있습니다. 나는 this과 다른 키워드의 다양한 조합을 시도했지만 제대로 이해할 수는 없습니다.

updateCoordinates으로 전화하는 올바른 방법은 무엇입니까?

답변

1

(말장난하지 않음)이 시도 :

onComplete: function(el, dr) { this.updateCoordinates(el, dr) }.bind(this); 

당신의 onComplete 함수 내에서 this가의 onComplete 함수 자체를 의미합니다. 함수를 클래스에 바인딩하면 this이 클래스 인스턴스 자체를 참조합니다.

+0

브릴리언트, 고마워, '이'와'.bind (this) '의 다양한 조합을 시도했지만 올바른 결과를 얻지 못했다. 정확한 줄을 포함하도록 답을 수정했다. – Martin