读书人

将mxml里面代码放在as文件里面怎么实

发布时间: 2012-02-23 22:01:36 作者: rapoo

将mxml里面代码放在as文件里面,如何实现,叩谢100分
开发环境eclipse+java+BlazeDS
我现在查询查询一个表的数据方法是:
第一步:新建一个Module,里面的内容如下

XML code
  <mx:Module initialize="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="100%" height="100%">    <mx:DataGrid headerHeight="24" rowHeight="28" dataProvider="{roles}" width="100%" verticalAlign="middle" height="100%" headerStyleName="trHead">    <mx:columns>      <mx:DataGridColumn width="180" dataField="name" headerText="角色代码" />      <mx:DataGridColumn width="80" dataField="roleType" headerText="角色类别" labelFunction="disRoleType" />    </mx:columns>    </mx:DataGrid></mx:Module>


第二步:添加一个remoteObject
XML code
  <mx:RemoteObject       id="krSysRoleService"       destination="flexKrSysRoleService"       result="getRole(event)"      showBusyCursor="true"/>


第三步:写查询代码
XML code
           private function init():void{               krSysRoleService.query();           }                      private function getRole(event:ResultEvent):void{               roles = ArrayCollection(event.result);           }


按上面的步骤可以吧数据查询出来,并且显示在DataGrid里面,问题是我现在想把上面查询的代码放在一个Class/as文件里面,直接写一个方法,将我的值直接返回出来,然后在我的Module里面写一个方法,把值绑定在DataGrid,用上面的方法只能是先写init()方法放在initialize里面,然后再去根据事件返回值去处理roles = ArrayCollection(event.result);,希望大侠给段代码指点一下。。谢谢。。

[解决办法]
新建一个 public class Service extends RemoteObject
将配置赋值,并有静态方法引用

Java code
public class Service extends RemoteObject{  public static var _service:Service;    public static function get service():Service  {    return _service;  }  public static function configService(destination:String,endpoint:String,source:String):void  {    _service = new Serivce(destination,endpoint,source);  }  public static function getOperation(name:String,responder:IResponder):Object  {    var operation:AbstractOperation = _service.getOperation(name);    operation.addEventListener(ResultEvent.RESULT,responder.result);    operation.addEventListener(FaultEvent.FAULT,responder.fault);    return operation;  }  public function Service(destination:String,endpoint:String,source:String)  {    super(destination);    this.endpoint = endpoint;    this.source = source;  }}
[解决办法]
对了,主代码中需要查询时实例化KrSysRoleDelegate,然后krSysRoleDelegate.getRole()即可,krSysRoleDelegate可以设置相关侦听ResultEvent.RESUL/FaultEvent.FAULT
[解决办法]
学习了
[解决办法]
楼上的老大,谢谢了,,我看了看, 还看的不是很明白
[解决办法]
楼上的老大,谢谢了,,我看了看, 还看的不是很明白
[解决办法]
探讨
希望各位进来讨论讨论,这个问题是很多人应该碰到的,像java直接就写个方法就可以直接返回自己想要的值,而FLEX要实现是比较麻烦的。

[解决办法]
Flex中可以使用:
1、
XML code

 <mx:Script source="scripts/googleScripts.as"/>
[解决办法]
用这个标签
<mx:script>

</mx:script>
相当于html写JavaScript
或者说是
jsP里写
<%java代码%>

[解决办法]
探讨
我的意思是想把下面的代码合成一个方法,例如现在我检测用户名的方法是checkLoginname,然后还要定义一个checkLoginnameResult这个方法去监听结果,而且我把这个方法写在一个Class文件里,还需要定义一个变量private var bresult:Boolean; 在checkLoginnameResult将监听的值赋给bresult变量,然后在mxml里面调用,在mxml里面调用,还必须定义一个方法,
XML code
public class FlexKrSysUserService{

private var bresult:Boolean;

public function checkLoginname(loginName: String):void{
var ro: RemoteObject = new RemoteObject();
ro.destination = _destination;
ro.checkLoginname(loginName);
ro.addEventListener(ResultEvent.RESULT, checkLoginnameResult);
}

public function checkLoginnameResult(evt: ResultEvent):Boolean{
bresult = evt.result as Boolean;
return bresult;
}

public function getBresult(): Boolean{
return bresult;
}
}
能否将上面的代码合成一个方法:

XML code
public function checkLoginname(loginName: String):[b]Boolean[/b]{
var ro: RemoteObject = new RemoteObject();
ro.destination = _destination;
var result = ro.checkLoginname(loginName); ro.addEventListener(ResultEvent.RESULT, checkLoginnameResult);
return result;
}


[解决办法]
探讨
新建一个 public class Service extends RemoteObject
将配置赋值,并有静态方法引用

Java codepublicclass Serviceextends RemoteObject
{publicstatic var _service:Service;publicstatic function get service():Service
{return _service;
}publicstatic function configService(destination:String,endpoint:String,source:String):void
{
_service=new Serivce(destination,endpoint,source);
}publicstatic function getOperation(name:String,responder:IResponder):Object
{
var operation:AbstractOperation= _service.getOperation(name);
operation.addEventListener(ResultEvent.RESULT,responder.result);
operation.addEventListener(FaultEvent.FAULT,responder.fault);return operation;
}public function Service(destination:String,endpoint:String,source:String)
{super(destination);this.endpoint= endpoint;this.source= source;
}

}
当然上述Service类可以直接由mxml来完成,有个静态引用即可

按你的title所说似乎是想要用的时候在调用,那么
新建一个public class DelegateBase extends EventDispatcher implements IResponder这样的业务基础
Java codepublicclass DelegateBaseextends EventDispatcherimplements IResponder
{private var _operation:AbstractOperation;public function DelegateBase()
{}public function result(data:Object):void
{
dispose();
}public function fault(info:Object):void
{
dispose();
}public function dispose():void
{
_operation.removeEventListener(ResultEvent.RESULT,result);
_operation.removeEventListener(FaultEvent.FAULT,falut);
_operation=null;
}protected function getOperation(name:String):Object
{
_operation= Service.getOperation(name,this) as AbstractOperation;return _operation;
}

}

在来一个public class KrSysRoleDelegate extends DelegateBase

Java codepublicclass KrSysRoleDelegateextends DelegateBase
{private var _roleInfo:Object;public function KrSysRoleDelegate()
{super();
}public function get roleInfo():Object
{return _roleInfo;
}

overridepublic function result(data:Object):void
{
dispatch(data.clone() as ResultEvent);
_roleInfo= data.result;super.result(data);


}public function getRole():void
{
getOperation("query").send();
}
}
到这里为止KrSysRoleDelegate的实例里roleInfo就一直储存着最后一次的交互数据,当然也可以将roleInfo相关写成静态。

代码存手打,非复制,及有可能有码错,相关类详细请查看API,也有可能错误理解了LZ的意思,请见量

读书人网 >flex

热点推荐