(这是我做过的一个笔记管理系统的部分功能笔记管理 主要是TreePanle和TabPanel的使用)


以下是核心代码:
var Tree = Ext.tree;
var treeloader = new Tree.TreeLoader( {
dataUrl : "treepanelload.action"
});
var treepanel = new Tree.TreePanel( {
rootVisible : true, // 设为false将隐藏根节点,很多情况下,我们选择隐藏根节点增加美观性
border : true, // 有边框
animate : true, // 动画效果
autoScroll : true, // 自动滚动
width:'100%',
height:parent.height,
enableDD : true, // 拖拽节点
containerScroll : true,
loader : treeloader,
useArrows : true,
checkModel : 'cascade', // 对树的级联多选
onlyLeafCheckable : false
});
// 异步加载根节点
var rootnode = new Tree.AsyncTreeNode( {
id : 'p0',
text : '我的笔记',
draggable : false
});
treepanel.setRootNode(rootnode);
treepanel.on('beforeload', function(node) {
treepanel.loader.dataUrl = 'treepanelload.action?id=' + node.id;
});
var contextMenu = new Ext.menu.Menu( {
items : [ {
text : '新建笔记',
handler : newFileHandler
}, {
text : '新建文件夹',
handler : addFloderHandler
}, {
text : '删除文件夹',
handler : deleteHandler
}, {
text : '重命名',
handler : modifyHandler
}]
});
var fileMenu = new Ext.menu.Menu( {
items : [{
text : '编辑',
handler : editHandler
}, {
text : '查看',
handler : viewHandler
}, {
text: '删除',
handler : deleteHandler
},{
text: '重命名',
handler : modifyHandler
}]
});
treepanel.on('contextmenu', treeContextHandler);
function treeContextHandler(node, event) {
event.preventDefault();
node.select();
if(node.leaf) {
fileMenu.show(node.ui.getAnchor());
fileMenu.showAt(event.getPoint());
}else {
contextMenu.show(node.ui.getAnchor());
contextMenu.showAt(event.getPoint());
}
}
/*菜单选项处理函数:新建文件*/
function newFileHandler() {
var newNode = new Ext.tree.TreeNode({
text : '新建文档',
leaf: true
});
var selectedNode = treepanel.getSelectionModel().getSelectedNode();
var pid = selectedNode.id;
Ext.Ajax.request({
url:"http://localhost:8080/pnote/users/treehandle.action",
params:{
title:'新建文档',
flag:'newfile',
categoryid:pid
},
success: function(resp,opts) {
var respText = Ext.util.JSON.decode(resp.responseText);
newNode.setId(respText.id);
selectedNode.appendChild(newNode);
},
failure: function(resp,opts) {
var respText = Ext.util.JSON.decode(resp.responseText);
Ext.Msg.alert('错误', respText.error);
}
});
}
/*菜单选项处理函数:编辑*/
function editHandler() {
var selectedNode = treepanel.getSelectionModel().getSelectedNode();
var id = selectedNode.id;
var text = selectedNode.text;
if(centerRegion.findById("edittab"+id))
{
centerRegion.setActiveTab("edittab"+id);
return ;
}
centerRegion.add({
title:text,
id:"edittab"+id,
html:"<iframe scrolling='auto' frameborder='0' width='100%' height='100%' src='http://localhost:8080/pnote/users/treehandle.action?id="+id+"&flag=editfile'> </iframe>",
closable:true
});
centerRegion.setActiveTab("edittab"+id);
}
/*菜单选项处理函数:新建文件夹*/
function addFloderHandler() {
var newNode = new Ext.tree.TreeNode( {
text : '新建文件夹',
leaf: false
});
var selectedNode = treepanel.getSelectionModel().getSelectedNode();
var pid=selectedNode.id;
Ext.Ajax.request({
url:"http://localhost:8080/pnote/users/treehandle.action",
params:{
name:'新建文件夹',
flag:'newfloder',
id:pid
},
success: function(resp,opts) {
var respText = Ext.util.JSON.decode(resp.responseText);
newNode.setId(respText.id);
selectedNode.appendChild(newNode);
},
failure: function(resp,opts) {
var respText = Ext.util.JSON.decode(resp.responseText);
Ext.Msg.alert('错误', respText.error);
}
});
}
/*菜单选项处理函数:查看*/
function viewHandler (){
var selectedNode = treepanel.getSelectionModel().getSelectedNode();
var id = selectedNode.id;
var text = selectedNode.text;
if(centerRegion.findById("viewtab"+id))
{
centerRegion.setActiveTab("viewtab"+id);
return ;
}
centerRegion.add({
title:text,
id:"viewtab"+id,
html:"<iframe scrolling='auto' frameborder='0' width='100%' height='100%' src='http://localhost:8080/pnote/users/treehandle.action?id="+id+"&flag=viewfile'> </iframe>",
closable:true
});
centerRegion.setActiveTab("viewtab"+id);
}
/*菜单选项处理函数:删除文件 删除文件夹*/
function deleteHandler() {
var treenode = treepanel.getSelectionModel().getSelectedNode();
if(treenode.hasChildNodes()) {
Ext.Msg.alert('提示', '不能删除非空文件夹');
return ;
}
var nodeid= treenode.id;
Ext.Ajax.request({
url:'http://localhost:8080/pnote/users/treehandle.action',
params:{
id:nodeid,
flag:'delete'
}
});
treepanel.getSelectionModel().getSelectedNode().remove();
}
/*菜单选项处理函数:重命名*/
function modifyHandler() {
var treeEditor = new Ext.tree.TreeEditor(treepanel, {
allowBlank : false, // 允许出现空白
cancelOnEsc : true,// 按下ESC建自动取消空白
selectOnFocus : true
});
var selectedNode = treepanel.getSelectionModel().getSelectedNode();// 得到选中的节点
pid=selectedNode.id;
treeEditor.editNode = selectedNode;
treeEditor.startEdit(selectedNode.ui.textNode);
treeEditor.on("complete", function(treeEditor){
Ext.Ajax.request({
url:"http://localhost:8080/pnote/users/treehandle.action",
params:{
title:treeEditor.editNode.text,
id:pid,
flag:'modify'
}
});
});
}
//定义并构造西部面板
var westRegion = {
region:'west',
id:'west-panel',
iconCls: 'tabs',
title:'笔记之家',
split:true,
width: 200,
minSize: 175,
maxSize: 400,
collapsible: true,
margins:'0 0 0 5',
layout:'column',
layoutConfig:{
animate:true
},
items: [
{
items:treepanel
}
]
};
/** 定义中心区域, 本系统的核心区域, 所有打开的Tab都将在该区域展示 */
var centerRegion = new Ext.TabPanel({
region:'center',
deferredRender:false,
activeTab:0,
enableTabScroll:true,
listeners:{
remove: function(tp, c){
c.hide();
}
},
hideBorders:true,
autoDestroy: false,
items:[
{
xtype:'tabpanel' ,
title: '办公桌面',
iconCls: 'tabs',
closable: false,
frame:false,
html:"<iframe scrolling='auto' frameborder='0' width='100%' height='100%' src='http://localhost:8080/pnote/users/desktool/desktop.jsp'> </iframe>",
items:[]
}
]
});
本文介绍了一个基于ExtJS的笔记管理系统的设计与实现,重点讲解了TreePanel和TabPanel组件的应用,包括节点操作、文件管理及界面布局。
2602

被折叠的 条评论
为什么被折叠?



