2013-08-24 28 views
7

Tôi đang chuyển đổi codebase AS3 tôi để nguyên cảo và chạy vào lỗi này:nguyên cảo - giữ lại phạm vi trong trường hợp người nghe

đang AS3:

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 { 
    ...... 
} 

đang typescript

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 { 
    ...... 
} 

và tôi nhận được lỗi này "Lỗi loại không hợp lệ: Đối tượng # không có phương thức 'parseData'" vì dòng này xmlRequest.addEventListener .....

Tôi đã thử sử dụng chức năng mũi tên nhưng vẫn không sửa được (và tôi không nghĩ mình sử dụng đúng)

Trả lời

16

Khi bạn cần chuyển các hàm xung quanh sử dụng cú pháp lambda mới cho biến thành viên (được giới thiệu trong TypeScript 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

Cảm ơn bạn. Những công việc này. Tôi đã cố gắng sử dụng chức năng mũi tên trong cuộc gọi addEventListener, nhưng không cố gắng sử dụng nó trong phương thức xử lý. – user2694951

+1

Cảm ơn. Sẽ đánh giá cao nó đang được đánh dấu là câu trả lời – basarat

2

Cố gắng liên kết với các phạm vi

xmlRequest.addEventListener("load",this.handleDataLoaded.bind(this), false); 
Các vấn đề liên quan