2014-01-23 3 views
1

저는 typescript를 처음 접했습니다 - 변수 및 범위 문제가 있습니다.TypeScript 패싱 변수

2 가지 공개 방법이 있습니다. 하나는 문자열이 필요합니다. 첫 번째 메서드는 jQuery 클릭 함수 내에서 두 번째를 호출합니다 (즉 this.methodName을 더 이상 사용할 수 없음). 나는 논리적 인 방법으로 범위를 고치려고 시도했지만 TS는 다음과 같이 불평합니다 :

제공된 매개 변수는 호출 대상의 서명과 일치하지 않습니다. '호출'표현식에 대해 오버로드를 선택할 수 없습니다.

public test1() { 
     //fix scope 
     var scopeFix =() => this.test2; 

     $("#test").click(function() { 
      //this.test2("blah"); 
      //^^^ This doesn't work because "this." is used by jquery 
      scopeFix("blah"); 
     }); 
    } 

    public test2(testString:string) { 
     alert(testString); 
    } 

저는 (JS와 TS를 너무 많이 섞어 놓은 것처럼) 어리석은 것 같습니다 - 어떤 아이디어입니까?

+1

당신이 필요로하는'this' 범위에 대한 참조를 저장하는 로컬을 사용 http://jsfiddle.net/9DjGp/ – asawyer

+0

너무 가까이! 감사합니다. – Richard

+0

물론, 일반적인 질문입니다. 그러나 타이프 스크립트와 아무 관련이 없습니다. typesscript 오류는'scopeFix' 함수가 함수를 반환하는 paramterless 함수이기 때문에 호출 사이트가 틀리므로'fixScope() ('blah');와 같아야합니다. – asawyer

답변

2

타이프에서 당신은이 작업을 수행 할 수 있습니다

public test1() { 
    $("#test").click(() => { 
     this.test2("blah"); 
    }); 
} 

참고 () => {} 구문. 컴파일 된 자바 스크립트를 체크 아웃, 당신이 무엇을하고 있는지의 아이디어를 제공하려면 :

YourClass.prototype.test1 = function() { 
    var _this = this; 

    $("#test").click(function() { 
     _this.test2("blah"); 
    }); 
};