1

ヘルプ。戻るボタンをクリックしてホームページに戻った後、newContainer (これはムービー クリップです) を削除する必要があります。しかし、それはホームページをロードするだけで、newContainer はまだそこにあります。:( どこで私は間違えましたか?

import flash.events.MouseEvent;
import flash.events.Event;
import fl.motion.MotionEvent;
import flash.net.URLVariables;
import flash.display.MovieClip;
import flashx.textLayout.elements.Configuration;



var ctr:int = 0;
var now:Date = new Date();


var myurl:String = "http://localhost:8888/eventspictures/getdata.php";


var scriptLoader:URLLoader = new URLLoader();
var scriptRequest:URLRequest = new URLRequest();
var newContainer:MovieClip;


scriptRequest.url = myurl + "?ck=" + now.getTime();

scriptLoader.addEventListener(Event.COMPLETE, handleLoadSuccess);
scriptLoader.addEventListener(IOErrorEvent.IO_ERROR, handleError);



scriptRequest.method = URLRequestMethod.POST;
scriptLoader.load(scriptRequest);


function handleLoadSuccess(evt:Event):void
{

for (var j:Number = 0; j <4; j++)
{
    var newContainer:MovieClip = new con();

    newContainer.name = String(ctr);

    newContainer.y = j*80 +65;
    newContainer.x= 16;

    stage.addChild(newContainer);






    var variables:URLVariables = new URLVariables(evt.target.data);
    trace(variables.output);


    var parse:String = variables.output;
    var parsed:Array = parse.split("<|>");

    var tab:String = '&#09;';
    var eventname:String = '';
    var date:String='';
    var slotsleft:String='';



// different variable names to assign to different column names(etc; eventname, date, slotsleft)
    // loop through.. start from O

        for (var i:Number = 0; i<parsed.length-1; i++)
    {
        trace(parsed[i]);

        var item:String = parsed[i];
        var itemarray:Array = item.split(",");

        eventname +=  itemarray[2] + tab + "<br>";
        date += itemarray[3] + tab;
        slotsleft += itemarray[4] + tab;





        trace(eventname);

        newContainer.eventname_txt.htmlText = eventname;
    newContainer.date_txt.htmlText= date;
    newContainer.slotsleft_txt.htmlText=slotsleft;



}


    }





    //slotsleft_txt.x = 270;
}
function handleError(evt:IOErrorEvent):void
{
}

backbutton_mc.addEventListener(MouseEvent.CLICK, goHomePage);

function goHomePage (evt:Event):void{

    gotoAndPlay("dashboard");

removeChild(newContainer); }

stop();
4

1 に答える 1

0

関数には、4を作成し、それらをステージに追加するhandleLoadSuccess()ループがあります。MovieClip

ただし、goHomePage()関数では、ステージから1つのオブジェクトのみを削除しようとします。このオブジェクトはおそらくあなたの例にあることがわかります(デバッグFlash Playerを使用している場合にエラーを生成するはずnullのオブジェクトを削除しようとしています)。null

これはおそらく、コードでnull指定された2つの変数を定義したためですnewContainer。1つはスクリプトの先頭で宣言され、もう1つは関数内で宣言されます(各行handleLoadSuccess()でキーワードを使用しているため)。var

関数内で作成された変数は、その関数の実行中にのみ存在します。関数の外部で作成された変数が値を受け取ることはありません。

使用できる2つのアプローチ:

Arrayステージに追加したものを:に入れて追跡します。

newContainer関数の外部にある変数をArray呼び出されたものに置き換えますcontainers

var containers:Array = [];

関数handleLoadSuccess()で、それぞれMovieClipをステージに追加するときに、それらもcontainers配列に追加します。

stage.addChild(newContainer);
containers.push(newContainer);

最後に、関数で配列をgoHomePage()反復処理して、それぞれを削除します。containersMovieClip

for (var j:int = 0; j < containers.length; j++)
{
    stage.removeChild( containers[j] );

}
// reset the containers array so it's empty for the next time
// and to remove the references to the MovieClips (to prevent a memory leak)
containers=[];

ステージからすべてを盲目的に削除します

これが受け入れ可能であれば、はるかに簡単です。goHomePage()関数内のステージの子を逆方向に繰り返します。

for (var j:int = stage.numChildren; j >= 1; j--)
{
    stage.removeChildAt(j - 1);
}
于 2012-07-07T06:11:36.457 に答える