我是actionscript的新手,我正在为只支持ActionScript 2.0的网络设备编写代码。
我正在尝试读取XML提要并从提取中提取两段文本数据(摘要和详细信息),然后将它们显示为两个单独的TextField,一旦我知道它们各自的长度,就调整TextFields的大小和重新定位。 / p>
我已成功从feed中提取值,并使用XML onLoad()方法填充TextFields。在onLoad()方法结束时,我想我可以调用我的类的私有resizeSummary()方法来执行此操作,但由于我在onLoad()方法中明显不理解的原因,我似乎无法得到我的调用resizeSummary()方法。
我稍后会在代码中调用resizeSummary(),但这似乎并不重要,因为onLoad()在其他所有操作完成之后才被调用。所以似乎有一个我不知道如何控制的时间问题。
最简单的解决方案是如果我能弄清楚如何在xml onLoad()函数事件中调用我调用的resizeSummary()方法。
第二个最简单的解决方案是,如果我在onLoad()完成后得到通知,那么我可以调整TextFields的大小。
我的课程的代码段显示在此帖子的底部。
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");
}
}
答案 0 :(得分:1)
尝试交换
this.resizeSummary();
代表
resizeSummary();
this
指的是onLoad函数,因此范围不再是类级别。
答案 1 :(得分:1)
对于我的类中定义的匿名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();
}
}