2013-08-24 42 views
7

Ben typescript benim AS3 kod tabanına dönüştürülmesi ediyorum olay dinleyicisi kapsamda bulunması ve bu hatayla çalıştırın:typescript -

AS3 kod:

private function loadDataXml(assetsXml : String) : void { 
    var loader : URLLoader = new URLLoader(); 
    loader.addEventListener(Event.COMPLETE, handleDataLoaded); 
    loader.load(new URLRequest(assetsXml)); 
} 

private function handleDataLoaded(event : Event) : void { 
    var xml_data : XML = new XML(event.target.data); 
    parseData(xml_data); 
    ......... 
} 

private function parseData(xml_data : XML) : void { 
    ...... 
} 

typescript kodu

private loadDataXml(assetsXml : string) { 
    var xmlRequest:XMLHttpRequest = new XMLHttpRequest(); 
    xmlRequest.addEventListener("load",this.handleDataLoaded, false); 
    xmlRequest.open("GET", assetsXml, false); 
    xmlRequest.setRequestHeader("Content-Type", "text/xml"); 
    xmlRequest.send(null); 
} 

private handleDataLoaded(evt:Event) { 
    var xmlDoc:Document = (<XMLHttpRequest> evt.target).responseXML; 
    this.parseXMLData(xmlDoc); 
    ...... 
} 

private parseData(xmlDoc:Document):void { 
    ...... 
} 

ve ben olsun Bu hata "Uncaught TypeError: Object # yöntemi yok" parseData '"nedeniyle bu satırdan xmlRequest.addEventListener .....

Ben ok işlevini kullanarak denedi ama hala bunu düzeltmek olamazdı (ve ben eğer doğru kullanmak sanmıyorum) etrafında fonksiyonları geçmesine gerektiğinde

cevap

16

typescript tanıtılan üye değişkenleri için yeni lambda sözdizimi (kullanmak 0.9.1):

private loadDataXml(assetsXml : string) { 
    var xmlRequest:XMLHttpRequest = new XMLHttpRequest(); 
    // you are passing a member function Use lambda to define this function: 
    xmlRequest.addEventListener("load",this.handleDataLoaded, false); 
    xmlRequest.open("GET", assetsXml, false); 
    xmlRequest.setRequestHeader("Content-Type", "text/xml"); 
    xmlRequest.send(null); 
} 

private handleDataLoaded = (evt:Event) => { // Since you want to pass this around 
    var xmlDoc:Document = (<XMLHttpRequest> evt.target).responseXML; 
    this.parseXMLData(xmlDoc); // you will get the correct this here 
    ...... 
} 

private parseData(xmlDoc:Document):void { 
    ...... 
} 
+1

bağlanma deneyin teşekkür ederiz. Bu çalışıyor. AddEventListener çağrısında ok işlevini kullanmayı denedim, ancak işleyici yönteminde kullanmayı denemedim. – user2694951

+1

Teşekkürler. Cevap olarak işaretlendiğini takdir ediyorum – basarat

2

kapsamı

xmlRequest.addEventListener("load",this.handleDataLoaded.bind(this), false);