ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据

个人认为,XTemplate是ExtJs中最灵活的用来显示数据的组件,有点类似aspx中的Repeater控件,显示数据的模板完全可以由用户以html方式来定制.

 

先给一个官方的静态示例(稍微改了下),代码并不复杂,关键的地方,我已经注释了

 1      < script type = " text/javascript " >
 2         Ext.onReady( function ()  {
 3
 4            var data = {
 5                name: 'Jack Slocum',
 6                title: 'Lead Developer',
 7                company: 'Ext JS, LLC',
 8                email: 'jack@extjs.com',
 9                address: '4 Red Bulls Drive',
10                city: 'Cleveland',
11                state: 'Ohio',
12                zip: '44102',
13                drinks: ['Red Bull''Coffee''Water'],
14                kids: [
15    { name: 'Sara Grace', age: 3 },
16    { name: 'Zachary', age: 2 },
17    { name: 'John James', age: 0 }
18]
19            }
;
20
21            var tpl = new Ext.XTemplate(
22'<p>Name: {name}</p>',
23'<p>Title: {title}</p>',
24'<p>Company: {company}</p>',
25'<p>[Kids:] ',
26'<tpl for="kids">',//表明这里循环读取kids节的数据
27'<p>  {name}</p>',
28'</tpl></p>',
29'<p>[Drinks:] ',
30'<tpl for="drinks">',
31'<p>  {#}.{.}</p>'//表明这里循环读取drinks节的数据,当数据没有属性名称时,用"."代表数据
32'</tpl></p>'
33);
34            tpl.overwrite(Ext.getBody(), data);
35
36        }
);
37      < / script>   

 

运行结果图:

 

接下来我们看看如何跟服务器端的WCF做交互

1.首先定义一个用于信息传输的实体类(实际开发中,可以是任何可序列化的class,包括linq to sql生成的类)

 


using System.Collections.Generic;
using System.Runtime.Serialization;


namespace Ajax_WCF
{
[DataContract]
public class Person
{
[DataMember]
public string name { set; get; }
[DataMember]
public string title { set; get; }
[DataMember]
public string company { set; get; }
[DataMember]
public string email { set; get; }
[DataMember]
public string address { set; get; }
[DataMember]
public string city { set; get; }
[DataMember]
public string state { set; get; }
[DataMember]
public string zip { set; get; }
[DataMember]
public List<AbstractData> drinks { set; get; }
[DataMember]
public List<KidData> kids { set; get; }
}


[DataContract]
public class AbstractData
{
[DataMember]
public string name { set; get; }
}


[DataContract]
public class KidData : AbstractData
{
[DataMember]
public int age { set; get; }
}
}


2.新建一个"启用了Ajax的WCF服务"
a.同时将svc手动修改一下,注意下面的高亮部分要手动加上去:

<%@ ServiceHost Language="C#" Debug="true" Service="Ajax_WCF.MyService" CodeBehind="MyService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
b.web.config中,也参考下面修改
 <behavior name="Ajax_WCF.MyServiceAspNetAjaxBehavior">
      <webHttp />
      <!--<enableWebScript/>-->
    </behavior>

c.在wcf中增加一个方法,代码如下:

Code

这里为了简单起见,直接new并初始化了一个Person对象,然后返回为JSON格式

 

3.最后修改一下前面静态页的代码,完整页面代码如下:

 

Code

解释一下:利用ExtJs的Ajax对象,请求MyServices.svc/GetPerson方法,获取Json字符串,其它地方完全一样,需要注意的是:

a.返回的字符串,需要用Ext.Util.JSON.decode转换成JSON对象

b.为了显示出loading加载效果,在调用Ajax的Request之前,用demo.com.innerHTML和demo.com.className先把目标div设置成"加载中"的字样

运行效果如下:

转载请注明来自"菩提树下的杨过"http://www.cnblogs.com/yjmyzz/archive/2008/09/09/1287767.html

这回运行时,增加了"数据加载中"的效果,加载成功后与刚才的静态示例显示结果完全相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值