初学flex,我下载了flash builder 4,还是60天试用版。
建立了一个flex项目,创建完以后发现跟vs的ide还真像。不错,用惯了vs,再学flex还是比较容易上手的。拖了几个组件到窗体上,再写一些简单的代码,运行起来,点击那个纯flash的按钮,旁边的label里出现了我输入的文本!挺爽的。
“hello wold” trace了一下不能输出,原来是as的函数在函数体后边定义类型。跟我知道的其他语言语法都不同。
该连接数据库了,这可是快速学习语言必经的一步。从网上找了半天资料,都是用关于web service的。又找了半天找不到别的方法。flex官网上的还不行,英文比较次,幸好有及时翻译软件,不过代码写的比我找到的一个csdn上花了5分下下来的代码还繁琐,索性还是看那个代码吧。
先打开vs,写了一个连接数据库的web service,然后运行起来,下边是代码:
[WebMethod]
public string GetTableXml(string tablename)
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ToString();
SqlConnection conn = new SqlConnection(connString);
string sql = "select * from " + tablename;
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
cmd.Connection.Open();
DataSet ds = new DataSet();
SqlDataAdapter oAdapter = new SqlDataAdapter(cmd);
oAdapter.Fill(ds);
return ds.GetXml();
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
这是一个根据表明获取dataset数据集,然后转换成xml格式输出的web服务。
然后在flash builder4 的项目里的mxml源代码中添加一个dataGrid,照葫芦画瓢,声明了一个webservice:
<fx:Declarations>
<mx:WebService id="ws" wsdl="http://localhost:6700/tradeageService.asmx?WSDL"><!-- Web服务地址-->
<mx:operation name="GetTableXml" result="ResultHandler()">
<mx:request xmlns="">
<tablename>{txtName.text}</tablename><!-- web服务提供的接口的参数名字 本程序是StrSql sql.text 要执行的SQL语句-->
</mx:request>
</mx:operation>
</mx:WebService>
</fx:Declarations>
最前和最后边的 <fx:Declarations>必须有,因为webservice声明未实现“mx.core.IUIComponent”,所以它必须包含在 <Declarations> 标签中。
script中的代码:
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var asd:XML;
private function ResultHandler():void
{
asd = new XML(ws.GetTableXml.lastResult);
dg_comments.dataProvider = asd.children();
}
]]>
</fx:Script>
引入命名空间和定义数据绑定方法。
然后定义按钮和文本框,点击执行方法:
<s:TextInput id="txtName" text="wf_admin" x="196" y="66" />
<s:Button x="352" y="67" label="按钮" click="ws.GetTableXml.send()"/>
还有一步,需要在gridview中指定要显示的字段:
<mx:DataGridColumn headerText="LoginPwd" dataField="LoginPwd"/>
ok,点执行。弹出ie浏览器,点按钮后,datagrid中的单元格立即被数据填充满了。太帅了!
mxml中的所有代码如下:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:userlist="services.userlist.*">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var asd:XML;
private function ResultHandler():void
{
asd = new XML(ws.GetTableXml.lastResult);
dg_comments.dataProvider = asd.children();
}
]]>
</fx:Script>
<fx:Declarations>
<mx:WebService id="ws" wsdl="http://localhost:6700/tradeageService.asmx?WSDL"><!-- Web服务地址-->
<mx:operation name="GetTableXml" result="ResultHandler()">
<mx:request xmlns="">
<tablename>{txtName.text}</tablename><!-- web服务提供的接口的参数名字 本程序是StrSql sql.text 要执行的SQL语句-->
</mx:request>
</mx:operation>
</mx:WebService>
</fx:Declarations>
<mx:DataGrid id="dg_comments" x="200" y="119">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="ID"/>
<mx:DataGridColumn headerText="realName" dataField="RealName"/>
<mx:DataGridColumn headerText="LoginPwd" dataField="LoginPwd"/>
</mx:columns>
</mx:DataGrid>
<s:Label x="205" y="292" text="标签"/>
<s:TextInput id="txtName" text="wf_admin" x="196" y="66">
</s:TextInput>
<s:Button x="352" y="67" label="按钮" click="ws.GetTableXml.send()"/>
</s:Application>
总的来说,flex学起来还是比较容易的,特别是用惯了类似vs的编辑器更是轻车熟路。以前学过flash与.net还没有封装时的集成方法(flash remoting),很麻烦,当时放下没学了,现在再学flex,真是比较爽!