ExtJs与WCF交互:生成树

时间:2022-09-06 11:55:00

上文做了下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交互:生成树
public class
 treenode 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public string
 id; 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public string
 text; 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public List<treenode> children = new List<treenode>
(); 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public string
 cls; 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[DataMember] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public bool
 leaf; 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[ServiceContract(Namespace 
= ""
)] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树[AspNetCompatibilityRequirements(RequirementsMode 
=
 AspNetCompatibilityRequirementsMode.Allowed)] 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
public class
 WcfTreeService 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
// 添加 [WebGet] 属性以使用 HTTP GET 

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交互:生成树treenode t 
= new treenode(); 
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交互:生成树treenode t0 
= 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交互:生成树treenode t1 
= 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交互:生成树treenode t2 
= 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 = new List<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交互:生成树<link rel="stylesheet" type="text/css" href="js/ext2.1/resources/css/ext-all.css">  
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<script type="text/javascript" src="js/ext2.1/adapter/ext/ext-base.js"></script>
 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
<script type="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交互:生成树
<div id="tree-div">
 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
</div>
 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树

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

ExtJs与WCF交互:生成树<script type="text/javascript">  
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树Ext.onReady(
function() 

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树
var Tree =
 Ext.tree; 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
var tree = new Tree.TreePanel( 

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 : 
new Tree.TreeLoader( 

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树dataUrl : 
'WcfTreeService.svc/GetTree'
 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}

ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树}
); 
ExtJs与WCF交互:生成树
ExtJs与WCF交互:生成树ExtJs与WCF交互:生成树
var root = new Tree.AsyncTreeNode( 

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