Подключение flex и weborb? - PullRequest
       45

Подключение flex и weborb?

1 голос
/ 03 ноября 2011

я новичок в флексе.У меня есть вопрос :)

У меня есть

[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 в моем коде flex, чтобы нарисовать много кубов, использую papervison3d, но в первый раз я получил model.Solve_SendResult = null.Но когда я нажимаю снова, тогда все ок.

Кто-нибудь мне поможет?Спасибо

1 Ответ

0 голосов
/ 22 декабря 2011

Объект model.Solve_SendResult содержит результат выполненного метода serviceProxy.Solve_Send (request). Solve_Send будет выполняться асинхронно, и в результате при запуске метода show объект Solve_SendResult может быть по-прежнему нулевым.

В качестве решения вы можете использовать следующее:

  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. В вашем классе Алгоритма определите следующее:

    [Event(name=DrawEvent.DATA_CHANGED, type="foo.DrawEvent")] 
    public class Algorithm extends EventDispatcher{ 
    //your code
    
  3. В методе Solve_SendHandler класса Algorithm добавьте следующее

    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

С уважением, Кирилл

...