2013-08-24 28 views
7

にスコープを保持私は活字体に私のAS3のコードベースを変換し、このエラーに遭遇しています:活字体 - イベントリスナー

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

活字体コード

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

と私を得ますこのエラー "Uncaught TypeError:Object#には、この行のために 'parseData'メソッドがありません。xmlRequest.addEventListener .....

私は矢関数を使ってみましたが、修正できませんでした。(正しく使用したとは思いません)

答えて

16

メンバー関数の新しいラムダ構文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

ありがとうスコープへの結合を試してみてください。これは機能します。私はaddEventListener呼び出しで矢印関数を使用しようとしましたが、ハンドラメソッドでそれを使用しようとしませんでした。 – user2694951

+1

ありがとうございます。それが答えとしてマークされていただければ幸いです – basarat

2

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