/** * 功能主程序类 */ Ext.define('com.RolePanel', { extend : 'Ext.panel.Panel', xtype : 'com-role-grid', initComponent : function() { var self = this; var store = new Ext.data.Store({ autoLoad : true, proxy : { type : 'ajax', url : 'roleAction!list.action', reader : { type : 'json', root : 'rows' } }, model : 'com.RolePanel.Mode', writer : new Ext.data.JsonWriter(), listeners : { 'load' : function(store, records) { if (records) { if (roleGridPanel.getSelectionModel().getSelection().length <= 0) { roleGridPanel.getSelectionModel() .select(records[0]); self.authFormPanel.loadRecord(records[0]); } } } } }); var roleGridPanel = new Ext.grid.Panel({ region : 'center', columnLines : true, store : store, loadMask : true, columns : [{ text : '编号', sortable : true, dataIndex : 'cid', locked : true, hidden : true }, { text : '角色名称', dataIndex : 'cname', flex : 5 }, { text : '备注', dataIndex : 'cdesc', flex : 5 }, { text : 'ctype', dataIndex : 'ctype', hidden : true }, { text : '拥有权限', dataIndex : 'authIds', hidden : true // renderer : function(value, metaData, record) // { // if (record.raw.authNames) { // return Ext.String.format( // '<span title={0}>{1}</span>', // record.raw.authNames, // record.raw.authNames); // } // } }], bbar : Ext.create('Ext.PagingToolbar', { store : store, displayInfo : true, beforePageText : '第', afterPageText : '页,共{0}页', displayMsg : '共{2}个', emptyMsg : "没有记录" }), tbar : [{ text : '增加', scope : this, iconCls : 'Add', handler : function() { roleGridPanel.getSelectionModel() .deselectAll(); self.authFormPanel.form.reset(); } }, { text : '删除', scope : this, iconCls : 'Delete', handler : function() { this.openDelete(self); } }], forceFit : true }); this.roleGridPanel = roleGridPanel; roleGridPanel.getSelectionModel().on('selectionchange', function(t, sMode) { if (sMode[0]) { self.authFormPanel.loadRecord(sMode[0]); } }, this); var storeRoleAuth = Ext.create('Ext.data.TreeStore', { // autoLoad : true, proxy : { type : 'ajax', url : "authAction!authTreeRecursive.action" }, fields : ['id', 'text', 'leaf', 'checked'], root : { id : '0', text : 'root', lazyLoad : true } }); var authTree = new Ext.tree.Panel({ width : 400, height : 450, autoScroll : true, animate : true, containerScroll : true, rootVisible : false, store : storeRoleAuth, listeners : { 'expand' : function(p) { var node = p.getSelectedNode(); if (!node) self.refresh(p.getRootNode()); else { self.refresh(node); } } } }); authTree.on('checkchange', function(node, checked) { node.checked = checked; if (node.parentNode.id.length != 1) { self.setParentNode(node.parentNode, checked, self); node.expand(); } if (node.hasChildNodes()) self.setChildNode(node, checked, self); }, authTree); self.authTree = authTree; var authFormPanel = new Ext.form.Panel({ title : '角色编辑', region : 'east', split : true, collapsible : true, border : false, items : [{ fieldLabel : '编号', name : 'id', hidden : true }, { xtype : 'textfield', allowBlank : false, fieldLabel : '角色名称', name : 'name', emptyText : '角色名称' }, { xtype : 'textfield', fieldLabel : '备注', name : 'desc' }, { xtype : 'textfield', name : 'authIds', fieldLabel : '权限Id', hidden : true, listeners : { 'change' : function(authId) { var root = authTree.getRootNode(); root.eachChild(function(child) { child.checked = false; child.set('checked', false); authTree.fireEvent('checkchange', child, false); }); var authIds = authId.getValue(); if (authIds) { Ext.each(authIds.split(","), function( authId) { self.setNodeChecked(authId, root, self); }); } } } }, { xtype : 'fieldset', autoHeight : true, title : '权限', width : '100%', items : authTree }], tbar : [{ text : '保存', iconCls : 'icon-save', scope : this, handler : function() { self.saveRoleAuth(self); } }] }); self.authFormPanel = authFormPanel; Ext.apply(this, { layout : 'border', border : 0, items : [roleGridPanel, authFormPanel] }); this.callParent(); }, setNodeChecked : function(nodeId, node, self) { if (nodeId == node.data.id) { node.checked = true; node.set('checked', true); self.authTree.fireEvent('checkchange', node, true); return false; } else if (node.hasChildNodes()) { node.eachChild(function(child) { var result = self.setNodeChecked(nodeId, child, self); if (!result) return false; }); } return true; }, setChildNode : function(node, checked, self) { node.expand(); node.eachChild(function(child) { child.checked = checked; child.set('checked', checked); if (child.hasChildNodes()) self.setChildNode(child, checked, self); }); }, setParentNode : function(node, checked, self) { var childNoChecked = false; node.checked = checked; node.eachChild(function(child) { if (!child.checked) { childNoChecked = true; return false; } }); node.set('checked', childNoChecked ? (checked ? false : checked) : checked); if (node.parentNode != null) self.setParentNode(node.parentNode, checked, self); }, openDelete : function(self) { var selection = self.roleGridPanel.getSelectionModel().getSelection()[0]; if (selection) { Ext.MessageBox.confirm('提示', '你确定要删除"' + selection.raw.cname + '"吗?', function(resu) { if (resu == 'yes') { Ext.Ajax.request({ url : 'userAction!delete.action', params : { ids : selection.raw.cid }, success : function(response, options) { var jsonResult = Ext.JSON .decode(response.responseText); if (jsonResult.success) self.roleGridPanel.getStore() .reload(); Ext.Msg.alert('提示', jsonResult.msg); }, failure : function(response, options) { var jsonResult = Ext.JSON .decode(response.responseText); Ext.Msg.alert('失败', jsonResult.msg); } }); } }); } else { Ext.MessageBox.alert('提示', '请选择你要删除的数据'); } }, saveRoleAuth : function(self) { var result = self.authFormPanel.form.getFieldValues(); var root = self.authTree.getRootNode(); var authIds = []; root.eachChild(function(child) { self.getChildNodeAuth(child, authIds, self); }); self.authFormPanel.form.findField('authIds') .setValue(authIds.join(',')); self.authFormPanel.form.submit({ url : "roleAction!save.action", method : 'POST', success : function(f, action) { var result = action.result; if (result.success) { self.roleGridPanel.getStore().load(); } else { Ext.Msg.alert('错误', result.message); } }, failure : function(f, action) { Ext.Msg.alert('错误', resp.responseText); } }); }, getChildNodeAuth : function(node, authIds, self) { if (node.data.checked) authIds.push(node.data.id); if (node.hasChildNodes()) node.eachChild(function(child) { self.getChildNodeAuth(child, authIds, self); }); } }); /** * 用户数据MODE */ Ext.define('com.RolePanel.Mode', { extend : 'Ext.data.Model', fields : [{ name : 'id', type : 'string' }, { name : 'name', type : 'string' }, { name : 'desc', type : 'string' }, { name : 'type', type : 'string' }, { name : 'authIds', type : 'string' }, { name : 'authNames', type : 'string' }] });
java 返回树对象字段:
public class TreeNode implements java.io.Serializable { private static final long serialVersionUID = 1L; private String id; private String text;// 树节点名称 private String iconCls;// 前面的小图标样式 private List<TreeNode> children;// 子节点 private boolean leaf = false; private boolean expanded = true;// 是否展开(true,false) private String checked = null; private Object attachment; }
相关推荐
在EXT.NET中,我们可以为每个TreePanel节点添加Checkbox,通过配置`CheckBoxModel`来控制其行为。以下是一些关键知识点: 1. **CheckBoxModel配置**: - `Checkable`: 这个属性用来指定节点是否可被选中,设置为`...
Checkbox在TreePanel中的应用通常涉及到多选功能,用户通过勾选Checkbox来选择一个或多个节点。在EXT.NET中,我们可以通过配置`CheckBoxModel`来实现这一功能。CheckboxModel允许我们设置各种选项,如单选、全选、...
综上所述,"Ext TreePanel Checked Ext复选框树"是一个强大的前端组件,它提供了便捷的多级选择功能,并且可以通过丰富的API和配置选项进行高度定制,以适应各种业务场景。在实际项目中,正确理解和使用这一特性,...
【Ext TreePanel】是Ext JS库中的一个组件,主要用于展示层次结构的数据,比如文件系统、组织结构等。TreePanel提供了一种交互式的树形视图,用户可以通过展开、折叠节点来查看和操作数据。 在Ext JS中,TreePanel...
TreePanel则是展示层次结构数据的理想选择,它可以展现出一个可展开和折叠的节点结构,常用于文件系统、组织架构或数据库结构的展示。TreePanel支持拖放操作,允许用户重新组织节点顺序。每个节点都可以包含子节点,...
完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.
博文链接:https://jfp.iteye.com/blog/178889
在EXTJS这个强大的JavaScript框架中,`Ext.Panel`和`TreePanel`是两个非常重要的组件,它们被广泛用于构建复杂的用户界面。这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据...
4. **定义节点模型(model)**:创建一个Ext.data.Model,定义树节点的数据结构,包括字段名(fields)。 ```javascript Ext.define('TreeNode', { extend: 'Ext.data.Model', fields: ['id', 'text', 'leaf'] /...
通过java 访问数据库而生成节点 子节点的 ID 与 父节点的关系为“父节点id_子节点id”此id为数据库中的id 同理“父节点id_子节点id_子子节点id”,因此加载树时将node.id做为参数 通过split("_"),根据数据的长度就...
4. **数据源同步**:如果你的数据源(如Store)在后台进行了更新,但是TreePanel没有重新加载,那么选中状态的改变可能不会反映到界面上。确保在数据源更新后,调用了`store.load()`来刷新TreePanel。 5. **渲染...
在本文中,我们将深入探讨`TreePanel`和`TabPanel`这两个重要的Ext JS组件,并讨论如何将它们结合在一起,以创建功能丰富的用户界面。`TreePanel`用于展示层次结构的数据,而`TabPanel`则提供了多标签页的功能,两者...
4、在工程中找到“main.js”文档,该文档中是控制应用显示GridPanel和TreePanel示例的开关 5、在IE的地址栏输入“http://localhost:8080/GridPanel”之后回车 6、如果一切正常,你会看到可以分页的表格;调整main.js...
在"Ext4 tree与后台交互"这个主题中,我们将深入探讨如何使用Ext4的TreePanel与后端进行数据交换,以及如何处理json数据。 首先,`TreeNode.java`可能是Java后端用于表示树节点的数据类。在Java中,树节点通常包含...
EXT树的核心类是`Ext.tree.TreePanel`,它提供了丰富的配置项和方法来定制和操作树形结构。控制选择意味着用户可以通过交互(如点击节点)来选择一个或多个树节点,而撤销功能则允许用户撤消他们的最后一步操作,...
ExtJs4 Checkbox Tree是基于ExtJs 4框架实现的一种特殊树形组件,它在传统的树形结构基础上增加了复选框功能。这种组件常用于需要用户多选树形数据的场景,比如权限设置、目录选择等。下面将详细介绍ExtJs4 Checkbox...
本示例将详细介绍如何在EXT中加载数据,特别是通过EXT的Treepanel来呈现一个生成的树形结构。 首先,我们要理解EXT Treepanel。Treepanel是EXT中用于展示层次结构数据的组件,它可以用于创建多级目录、组织结构图等...
总之,“Ext TreePanelrcheckbox级联选择的实现”涉及了ExtJS的TreePanel组件和复选框模型的使用,通过监听事件和自定义逻辑实现了节点间的选择级联。这种功能在具有层级结构的数据选择场景中非常常见,如权限管理、...