ExtJs与WCF交互:生成树

上文做了下Ajax与WCF进行json交互的简单介绍,本文阐述一个具体的实际应用:ExtJs与WCF交互,生成树.也很简单.先看看最终的效果吧:

ExtJs与WCF交互:生成树

第一步: 创建一个.net framework 3.5的网站项目ExtJsTreeWcf

第二步: 在网站项目中创建一个启用了Ajax的WCF服务WcfTreeService.svc,创建好之后,对该服务做如下的更改:

1)在WcfTreeService.svc中增加Factory="System.ServiceModel.Activation.WebServiceHostFactory",打开WcfTreeService.Svchtml编辑器的方法如下:

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树

添加Factory之后的html为

ExtJs与WCF交互:生成树

2)去除web.config中的<enableWebScript/>

ExtJs与WCF交互:生成树

第三步:在WcfTreeService.svc修改代码为:

ExtJs与WCF交互:生成树[DataContract]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicclass
treenode
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicstring
id;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicstring
text;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicList<treenode>children=newList<treenode>
();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicstring
cls;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicbool
leaf;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[ServiceContract(Namespace
=""
)]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[AspNetCompatibilityRequirements(RequirementsMode
=
AspNetCompatibilityRequirementsMode.Allowed)]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
publicclass
WcfTreeService
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
//添加[WebGet]属性以使用HTTPGET

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树[OperationContract]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[WebInvoke(ResponseFormat
=WebMessageFormat.Json)]
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public
treenode[]GetTree()
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
//在此处添加操作实现

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树treenodet
=newtreenode();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t.id
="noe1"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t.text
="节点1"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t.cls
="folder"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树treenodet0
=new
treenode();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t0.id
="noe1_0"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t0.text
="节点1_0"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t0.cls
="folder"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t0.leaf
=true
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t.children.Add(t0);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树treenodet1
=new
treenode();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t1.cls
="folder"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t1.id
="000"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t1.text
="节点1"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树treenodet2
=new
treenode();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t2.id
="noe1_1"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t2.text
="节点1_1"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t2.cls
="folder"
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t2.leaf
=true
;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树t1.children.Add(t2);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树List
<treenode>nodes=newList<treenode>
();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树nodes.Add(t);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树nodes.Add(t1);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
return
nodes.ToArray();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
//在此处添加更多操作并使用[OperationContract]标记它们

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树}

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树

其中treenode是数据契约,而WcfTreeService是服务契约,服务操作GetTree返回Json编码格式数据

第四步:拷贝extjs的脚本资源拷贝到项目中的js目录,然后在default.aspx中添加对extjs脚本的引用:

ExtJs与WCF交互:生成树<linkrel="stylesheet"type="text/css"href="js/ext2.1/resources/css/ext-all.css">
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<scripttype="text/javascript"src="js/ext2.1/adapter/ext/ext-base.js"></script>

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<scripttype="text/javascript"src="js/ext2.1/ext-all.js"></script>

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树第五步:在default.aspx增加如下的页面元素:
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<h2>ExtJs与WCF交互-树</h2>

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<divid="tree-div">

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
</div>

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树

在<head></head>中添加如下脚本:

ExtJs与WCF交互:生成树<scripttype="text/javascript">
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树Ext.onReady(
function()ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
varTree=
Ext.tree;
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
vartree=newTree.TreePanel(ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树rootVisible:
false
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树el:
'tree-div',//目标div容器

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树width:
175,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树height:
200
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树autoScroll:
true
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树animate:
true
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树enableDD:
true
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树loader:
newTree.TreeLoader(ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树dataUrl:
'WcfTreeService.svc/GetTree'

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
)
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
varroot=newTree.AsyncTreeNode(ExtJs与WCF交互:生成树
{
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树text:
'根结点'
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树draggable:
false
,
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树id:
'-100'

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树tree.setRootNode(root);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树tree.render();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树root.expand();
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
);
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
</script>

ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树

浏览页面default.aspx便出现文章开头的页面效果

利用httpwacth察看WcfTreeService.svc/GetTree的输出如下:

ExtJs与WCF交互:生成树[{"children": [{"children":[],"cls":"folder","id":"noe1_0","leaf":true,"text":"节点 1_0"}],"cls":"folder","id":"noe1","leaf":false,"text":"节点1"}, {"children":[{"children":[],"cls":"folder","id":"noe1_1","leaf":true,"text": "节点1_1"}],"cls":"folder","id":"000","leaf":false,"text":"节点1"}]

程序示例项目: /Files/jillzhang/ExtJsTreeWcf.rar