0

私はASが初めてで、いくつかの問題を管理しようとしています。

私は次のスクリプトを持っています

var t:Date = new Date ();
var day=t.getDate();
var month=t.getMonth()+1;
var today=day+"."+month;
var u:Number = 0;

var b_persons:Array = new Array ();

var loader:URLLoader = new URLLoader(new URLRequest("bday.xml"));
var bday_file:XML = new XML();

loader.addEventListener(Event.COMPLETE, endLoad);


function endLoad(all_data:Event)

{
   bday_file = XML(all_data.target.data);

   for each (var person:XML in bday_file.Person) 
   {
      if (person.BD == today) 
      {
          b_persons.push(person.FIO);

          trace (b_persons.length);
      }
   }
}

function assign_txtBdayPerson()
{
    txtBdayPerson.text=b_persons[u];
    trace(b_persons[u]);
    u=u+1;
    if (u >= b_persons.length)
    {clearInterval(delay_assign_txtBdayPerson);}

}

trace ("Test"+b_persons.length);

if (b_persons.length != 0)
    {
        var delay_assign_txtBdayPerson = setInterval(assign_txtBdayPerson,3000);
    }

私のxmlファイルには2つの適切な条件があり、出力ウィンドウには次のシーケンスが表示されます

1 よりも 0 と最後の 2 をテスト

そう思われる

trace ("Test"+b_persons.length); 

よりも早く実行されます

function endLoad(all_data:Event) 

完成されました

手伝っていただけませんか?

4

2 に答える 2

1

XML が読み込まれて解析された後に実行する必要trace ("Test"+b_persons.length);がある場合は、endload 内または endload が関数の最後で呼び出す関数内に配置する必要があります。

イベントに慣れていない場合、イベントは異なって邪悪に見えるかもしれませんが、慣れると、操作がはるかに優れていることがわかります。

于 2012-07-25T14:02:18.343 に答える
0

trace ("Test"+b_persons.length);これは、実際のロード開始と同じ「フレーム」で実行されるために発生します。endLoad()XMLがすでにロードされている場合、コールバックは少なくとも次のフレームで実行されます。これが、Flashの非同期フローの性質です。

于 2012-07-25T12:28:39.547 に答える