2011-06-28 44 views
1

我是ActionScript新手,我正在爲僅支持ActionScript 2.0的網絡應用裝置編寫代碼。actionscript 2.0中的方法調用的時間問題XML onLoad()函數

我試圖讀取XML飼料和飼料(摘要和詳細信息)提取文本數據的兩片則顯示它們作爲兩個獨立的TextField,調整和重新定位的TextField一旦我知道過了多久他們每個人都是。

我已經成功地從提要中提取了值,並使用XML onLoad()方法填充了TextFields。在onLoad()方法的結尾,我想我可以調用我的類的私有resizeSummary()方法來做到這一點,但由於我明顯不明白在onLoad()方法內的原因,我似乎無法得到我的調用resizeSummary()方法。

我會撥打電話至resizeSummary()在後面的代碼,但是這似乎並不重要,因爲在onLoad()沒有被調用,直到一切完成之後。所以似乎有一個時間問題,我不知道如何控制。

最簡單的解決辦法是,如果我能想出如何讓我叫在XML的onLoad()函數事件resizeSummary()方法。

第二個最簡單的解決方案是,如果我可以在onLoad()完成時通知我可以調整TextField的大小。

從我的類的代碼片段出現在這個帖子底部。

class Foo { 
// constructor 
function Foo() { 
    initSummaryTextField(); 
    getData(); 
} 

private function getData() { 
    var xmlData = new XML(); 
    xmlData.onLoad = function(success:Boolean): Void { 
    if (success) { 
     var summary:String = ''; 

     // successfully extracted summary text at this point and assigned value 
     // to TextField .text variable. So I am good to here. 

     // THIS CALL NEVER SEEMS TO BE MADE EVEN THOUGH TRACE STATEMENT 
     // IMMEDIATELY PRECEEDING IT DOES. 
     trace("About to call resizeSummary()"); 
     this.resizeSummary(); 
    } 
    } 
    xmlData.load("URL TO SERVICE"); 
} 


private function initSummaryTextField() { 
    // do stuff here to create new TextField() for summary 
} 
private function resizeSummary() { 
    trace("calling resizeSummary"); 
} 

}

回答

1

嘗試更換

this.resizeSummary(); 

resizeSummary(); 

this指的是在onLoad功能,因此範圍是不是一流水平了。

+0

如果我刪除了 '這一點。'從onLoad()函數定義中的resizeSummary()調用腳本不能編譯。我使用的是mtasc ubuntu編譯器,我得到的錯誤信息是類型錯誤Unknown variable resizeSummary。 – jspyeatt

1

爲定義的annonymous的onLoad()函數在我的課,你顯然不具備可視性類的方法和變量。

所以我做了以下事情。我添加了一個引用this的thisObject局部變量,並且可以在匿名函數中訪問它。

// ADDED THIS LINE TO CREATE A REFERENCE TO this OBJECT. Then withing my annonymous function I can reference thisObject internally. 
var thisObject:Foo = this; 

xmlData.onLoad = function(success:Boolean): Void { 
    if (success) { 
    var summary:String = ''; 

    // successfully extracted summary text at this point and assigned value 
    // to TextField .text variable. So I am good to here. 

    // THIS CALL NEVER SEEMS TO BE MADE EVEN THOUGH TRACE STATEMENT 
    // IMMEDIATELY PRECEEDING IT DOES. 
    trace("About to call resizeSummary()"); 
    thisObject.resizeSummary(); 
} 

}

相關問題