我是flex的新手。我有一个问题:)
我有
[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);
是数组并且我想在我的代码flex中使用model.Solve_SendResult
来绘制许多多维数据集时使用papervison3d但是我第一次收到model.Solve_SendResult = null
。但是当我再次点击时,一切都OK。
有人帮助我吗?感谢?
答案 0 :(得分:0)
model.Solve_SendResult对象包含执行的serviceProxy.Solve_Send(request)方法的结果。 Solve_Send将以异步方式执行,因此,在您触发show方法时,Solve_SendResult对象可能仍为空。
作为解决方案,您可以使用以下内容:
创建自定义事件
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);
}
}
}
在您的Algorithm类中定义以下内容:
[Event(name=DrawEvent.DATA_CHANGED, type="foo.DrawEvent")]
public class Algorithm extends EventDispatcher{
//your code
在Algorithm类的Solve_SendHandler方法中添加以下
public virtual function Solve_SendHandler(event:ResultEvent):void
{
dispatchEvent(new DrawEvent(DrawEvent.DATA_CHANGED));
//your code
}
在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
}
}
在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事件。当客户端收到Solve_Send调用的结果时,将调度DrawEvent.DATA_CHANGED。因此,onDataChanged将绘制您的多维数据集或执行您想要的任何操作:)
上面的方法是基本的,您必须知道事件如何在flex中工作以及如何处理它。有关更多信息,请访问:
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
此致 西里尔