1

フレックスの初心者です。質問があります:)

私は持っている

[Bindable] 
          private var model:AlgorithmModel = new AlgorithmModel(); 
          private var serviceProxy:Algorithm = new Algorithm( model ); 

MXML で

                    private function Show():void
        {

            // now model.Solve_SendResult = null
            while(i<model.Solve_SendResult.length) //
            {
                Draw(); //draw cube
            }
        }
                    private function Solve_Click():void
        {
            //request is a array
            Request[0] = 2;
            Request[1] = 2;
            Request[2] = 3;
            serviceProxy.Solve_Send(request);

            Show();

        }
<s:Button x="386" y="477" label="Solve" click="Solve_Click();"/>

serviceProxy.Solve_Send(request);そして、リクエストが配列であると呼び出しmodel.Solve_SendResult、コードフレックスで多くのキューブを描画するために使用したい場合は、papervison3dを使用しますが、初めて受け取っmodel.Solve_SendResult = nullた. しかし、もう一度クリックすると、すべて問題ありません。

誰か助けて?ありがとう?

4

1 に答える 1

0

model.Solve_SendResult オブジェクトには、実行された serviceProxy.Solve_Send(request) メソッドの結果が含まれます。Solve_Send は非同期で実行されるため、show メソッドを起動した時点で Solve_SendResult オブジェクトがまだ null である可能性があります。

解決策として、以下を使用できます。

  1. カスタム イベントを作成する

    package foo
    {
    import flash.events.Event;
    
    public class DrawEvent extends Event
    {
    public static const DATA_CHANGED:String = "dataChanged";
    
    public function DrawEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
    }
    }
    }
    
  2. Algorithm クラスで、次を定義します。

    [Event(name=DrawEvent.DATA_CHANGED, type="foo.DrawEvent")] 
    public class Algorithm extends EventDispatcher{ 
    //your code
    
  3. Algorithm クラスの Solve_SendHandler メソッドで、以下を追加します。

    public virtual function Solve_SendHandler(event:ResultEvent):void
    {
    dispatchEvent(new DrawEvent(DrawEvent.DATA_CHANGED));
    //your code
    }
    
  4. 以下に示すように、MXML クラスで onLoad メソッドを作成し、Algorithm クラスのインスタンスにイベント リスナーを追加します。

    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="onLoad()">
    
    public function onLoad():void
    {
       serviceProxy.addEventListener(DrawEvent.DATA_CHANGED, onDataChanged);
    }
    
    private function onDataChanged(event:DrawEvent):void{
    while(i<model.Solve_SendResult.length) //
        {
            Draw(); //draw cube
        }
     }
    
  5. Solve_Click() メソッドで次の変更を行います。

    private function Solve_Click():void
    {
        //request is a array
        Request[0] = 2;
        Request[1] = 2;
        Request[2] = 3;
        serviceProxy.Solve_Send(request);
    }
    

それだ!したがって、基本的に上記のコードは次のことを行います: サービス (アルゴリズム クラス) にリスナーを追加し、リスナーは DrawEvent.DATA_CHANGED イベントをリッスンします。DrawEvent.DATA_CHANGED は、クライアントが Solve_Send 呼び出しの結果を受け取るとディスパッチされます。したがって、onDataChanged はキューブを描画するか、または必要なことを行います :)

上記のアプローチは基本的なものであり、フレックスでイベントがどのように機能し、どのように対処できるかを知る必要があります。追加情報はこちらから入手できます。

http://livedocs.adobe.com/flex/3/html/help.html?content=createevents_3.html http://livedocs.adobe.com/flex/3/html/help.html?content=events_07.html

よろしく、 シリル

于 2011-12-22T18:58:59.440 に答える