actionscript 2.0 XML onLoad()函数中方法调用的计时问题

时间:2011-06-28 22:17:39

标签: xml actionscript

我是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");
}

}

2 个答案:

答案 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();
}

}