这段时间空闲的时候都在用Flex结合自己开发的框架做一些应用,在这里介绍一下Flex如果进行数据分页查询,顺便介绍一下Flex结合框架进行应用开发。
首先看下需要的应用效果

实际功能包括对Customer进行条件和分页查询,客户相关国家数据查询。
l 服务端功能处理
u 根据逻辑定义相关数据操作实体类
[Table("Customers")]
interface ICustomer
{
[ID]
string CustomerID { get; set; }
[Column]
string CompanyName { get; set; }
[Column]
string ContactName { get; set; }
[Column]
string ContactTitle { get; set; }
[Column]
string Address { get; set; }
[Column]
string City { get; set; }
[Column]
string Region { get; set; }
[Column]
string PostalCode { get; set; }
[Column]
string Country { get; set; }
[Column]
string Phone { get; set; }
[Column]
string Fax { get; set; }
}
[Table("Customers",DISTINCT=true)]
interface ICountry
{
[Column("Country")]
string Name { get; set; }
}
u 定义逻辑方法
[Service]
public class CustomerService
{
public IList<Customer> List(string matchCompanyName,string country, [Output]DataPage datapage)
{
Expression exp = new Expression();
if (!string.IsNullOrEmpty(matchCompanyName))
exp &= Customer.contactName.Match(matchCompanyName);
if (!string.IsNullOrEmpty(country))
exp &= Customer.country == country;
datapage.RecordCount = exp.Count<Customer>();
return exp.List<Customer>(new Region(datapage.PageIndex,datapage.PageSize));
}
public IList<Country> ListCountry()
{
Expression exp = new Expression();
return exp.List<Country>();
}
}
l Flex功能处理
u 定义AS逻辑代理方法
import Core.Utility;
/**
* Action Script调用方法生成工具1.0 生成时间:2009-7-27 21:39:39
*/
public dynamic class CustomerService_List
{
public var Callback:Function;
public var matchCompanyName:Object;
public var country:Object;
public var PageIndex:Object;
public var PageSize:Object;
public var RecordCount:Object;
public var PageCount:Object;
public var orderField:Object;
public function Execute(method:String="get"):void
{
this._TimeSlice = new Date();
Utility.CallMethod("CustomerService_List",this,Callback,method);
}
}
import Core.Utility;
/**
* Action Script调用方法生成工具1.0 生成时间:2009-7-27 21:39:43
*/
public dynamic class CustomerService_ListCountry
{
public var Callback:Function;
public function Execute(method:String="get"):void
{
this._TimeSlice = new Date();
Utility.CallMethod("CustomerService_ListCountry",this,Callback,method);
}
}
u 在界面定义逻辑操作对象
<mx:Script>
<![CDATA[
[Bindable]
private var Customers:Object = new ArrayCollection();
[Bindable]
private var Countrys:Object = new ArrayCollection();
private var getCustomer = new CustomerService_List();
private var getCountry = new CustomerService_ListCountry();
]]>
</mx:Script>
u 设置国家Combox数据源绑定
<mx:ComboBox id="txtCountry" dataProvider="{Countrys}"
labelField="Name" editable="true" width="135"
color="#000000"></mx:ComboBox>
u 设置客户查询数据源绑定
<mx:DataGrid dataProvider="{Customers}" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="CustomerID" dataField="CustomerID"/>
<mx:DataGridColumn headerText="CompanyName" dataField="CompanyName"/>
<mx:DataGridColumn headerText="ContactName" dataField="ContactName"/>
<mx:DataGridColumn headerText="ContactTitle" dataField="ContactTitle"/>
<mx:DataGridColumn headerText="Address" dataField="Address"/>
<mx:DataGridColumn headerText="City" dataField="City"/>
<mx:DataGridColumn headerText="Region" dataField="Region"/>
<mx:DataGridColumn headerText="PostalCode" dataField="PostalCode"/>
<mx:DataGridColumn headerText="Country" dataField="Country"/>
<mx:DataGridColumn headerText="Phone" dataField="Phone"/>
<mx:DataGridColumn headerText="Fax" dataField="Fax"/>
</mx:columns>
</mx:DataGrid>
u 在界面初始化事件中定义相关方法加调处理
<mx:initialize>
<![CDATA[
getCountry.Callback= function(result:XML,err:Boolean){
Countrys= result.Data.Country;
};
getCustomer.Callback = function(result:XML,err:Boolean){
Customers = result.Data.Customer;
if(getCustomer.FristSearch)
{
dp.Open(getCustomer.PageSize ,result.Properties.datapage.RecordCount)
}
};
getCustomer.PageSize=10;
getCustomer.FristSearch = true;
getCountry.Execute();
getCustomer.Execute();
]]>
</mx:initialize>
u 查询按钮相关功能处理
<mx:Button label="Search" icon="@Embed(source='Search.png')">
<mx:click>
<![CDATA[
getCustomer.FristSearch = true;
getCustomer.matchCompanyName = txtCompanyName.text;
getCustomer.country = txtCountry.text;
getCustomer.PageIndex =0;
getCustomer.Execute();
]]>
</mx:click>
</mx:Button>
其实Flex做应用开发效率还是挺高的,特别当你熟了MXML后基于不用在UI设计器和MXML间切换所带来的麻烦。由于Flex直接支持CSS文件来描述,所以在开发过程基本不用管样式,到最后把设计人员搞好的CSS直接引用到Application里即可。顺便推荐一个Flex的样式主题站http://www.scalenine.com/gallery/ 提供一些免费的主题.
Mikel









Replacing the default ViewEngine with a custom made version is actually quite easy! The most difficult part in creating your own ViewEngine implementation will probably be the parsing of your view. Fortunately, there are some examples around which may be a good source of inspiration (see











