一:M层
Ext.define("RT.store.deptstore",{
extend:"Ext.data.TreeStore",
defaultRootId:"root",
//storeId : "store",//创建id,供组件调用
proxy:{
type : "ajax",
url: "../treeApp/fakeData.jsp",
reader:{
type:"json",
autoLoad:true//不自动加载的话就拿不到数据
},
writer:{
type:"json"
}
}
})
数据jsp
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.lang.*" %>
<%@ page import="java.util.*" %>
<%
String param = request.getParameter("ids");
if( null != param)
{
System.out.println("==>"+param);
}
response.setCharacterEncoding("UTF-8");
response.getWriter().write( "{ 'text':'根节点','id':'0','checked':false,'leaf':false,'children':[ {'text':'子节点01','id':'01','leaf':false,/*checked:false,*/'children':[ { 'text':'孙节点0101','id':'0101','leaf':true },{ 'text':'孙节点0102','id':'0102','leaf':true } ]},{'text':'子节点02','id':'02','leaf':false,/*checked:false,*/'children':[{ 'text':'孙节点0201','id':'0201','leaf':true },{ 'text':'孙节点0202','id':'0202','leaf':true }]}]} " );
%>
有关json验证:
发现一个在线的json调试工具, 提示很到位:http://jsonlint.com/
类似的还有一个:http://tools.jb51.net/tools/json/json_editor.htm这个的优点是能看到js源代码...
二: V层:
Ext.define( "RT.view.depttree",{
extend:"Ext.tree.Panel",
alias:"widget.deptTree",
title:"部门树",
width:300,
height:300,
padding:"5 3 3 10",
rootVisible:false,//控制不显示root
store:"deptstore",
dockedItems:[
{
xtype:"toolbar" , dock:"bottom",
//ui:"footer",// 样式
items:[
{ xtype:"button" , text:"add" , id:"add" },
{ xtype:"button" , text:"copy" , id:"copy" },
{ xtype:"button" , text:"delete" , id:"del" }
]
},
{
xtype:"toolbar" , dock:"top",
items:[
{ xtype:"button" , text:"openAll" , id:"openAll" },
{ xtype:"button" , text:"closeAll" , id:"closeAll" }
]
}
]
})
三:C层
Ext.define("RT.controller.deptcontroller",{
extend:"Ext.app.Controller",
init:function(){
this.control({
//1.openAll
"deptTree button[id=openAll]":{
click:function(btn , event){
var tree = btn.ownerCt.ownerCt;
tree.expandAll();
}
},
//2.closeAll
"deptTree button[id=closeAll]":{
click:function(btn , event){
var tree = btn.ownerCt.ownerCt;
tree.collapseAll();
}
},
//3.增加按钮 , 选择父部门 增加其下子部门
"deptTree button[id=add]":{
click:function(btn , event){
var tree = btn.ownerCt.ownerCt;
var selected = tree.getChecked();//已选
if( 1 == selected.length )
{
var node = selected[0];//有且仅有一个
node.appendChild(
{ text:'孙节点X',id:'010X',leaf:true }
);
}
else
{
alert("请您选择一个节点");
}
}
},
//4.节点被点击时触发
"deptTree":{
itemclick:function( tree , record , item , index , enen ,options ){
alert( record.get("id") );
}
}
});
},
//==>实践证明以下名字必须全小写,像"userGrid"这类驼峰的名字ext找不到对应的js文件
views:[
"depttree"//v层的名字
],
stores:[
'deptstore'
],
models:[
]
});
//操作函数
function grid_delete(btnObj)
{
//alert("==>grid_delete()"+btnObj.text);
//按钮对象的父对象是工具条, 再父级才是所属表格
var gird = btnObj.ownerCt.ownerCt;
var dataArray = gird.getSelectionModel().getSelection();
if( 0 == dataArray.length )
{
Ext.Msg.alert("提示","至少要选择一条数据");
}
else
{
var ids = [];
$.each(dataArray , function(i,model){
//alert( model.get("name") );//model.data.name
ids.push( model.get("userId") );
});
Ext.Ajax.request({
url:"fakeData.jsp",
params:{'ids':ids},
method:"POST",
timeout:3000,//请求超时时间3秒
success:function( response , options){
//alert("==>成功" + response.responseText +"__" + options);
var store = gird.getStore();
//成功后删除数据 , 还从dataArray拿值
$.each(dataArray , function(i,model){
store.remove(model);//store类的删除一个model
});
},
failure:function( response , options){
alert("==>失败" + response.responseText +"__" + options);
}
});
}//end if else
}//end of function
四:treeApp.js
//==>http://192.168.0.189:8080/LSA/systemConfig/extDemo/treeApp/deptTreeMVC.jsp
//只有app.js在Ext.onReady()内部
Ext.onReady( function(){
//异步加载 , 其他Js声明对象 , app中实例化
Ext.Loader.setConfig({
enabled:true
});
Ext.QuickTips.init();
Ext.application({
name : "RT",//命名空间
appFolder : "../treeApp",//根目录地址
launch : function(){ //回调函数
Ext.create("Ext.container.Viewport",{//把表格扔到Viewport中显示
layout : "auto", //布局
items :[
//Viewport中元素的配置
{
xtype : "deptTree",
title : "部门树"
//html:"用户表格测试内容"
}
]
});
},
//==>controller的入口,ext会去appFolder/controller中找你指定的文件
controllers:[
"deptcontroller"
]
});
})