`

Ext4 treePanel checkBox选择样例

阅读更多
/**
 * 功能主程序类
 */
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;
}

 

0
0
分享到:
评论

相关推荐

    Ext.net TreePanel的Checkbox操作及父子联动

    在EXT.NET中,我们可以为每个TreePanel节点添加Checkbox,通过配置`CheckBoxModel`来控制其行为。以下是一些关键知识点: 1. **CheckBoxModel配置**: - `Checkable`: 这个属性用来指定节点是否可被选中,设置为`...

    Ext.net TreePanel的Checkbox操作及父子节点联动(修正)

    Checkbox在TreePanel中的应用通常涉及到多选功能,用户通过勾选Checkbox来选择一个或多个节点。在EXT.NET中,我们可以通过配置`CheckBoxModel`来实现这一功能。CheckboxModel允许我们设置各种选项,如单选、全选、...

    Ext TreePanel Checked Ext复选框树

    综上所述,"Ext TreePanel Checked Ext复选框树"是一个强大的前端组件,它提供了便捷的多级选择功能,并且可以通过丰富的API和配置选项进行高度定制,以适应各种业务场景。在实际项目中,正确理解和使用这一特性,...

    ext.net Menu + TreePanel

    TreePanel则是展示层次结构数据的理想选择,它可以展现出一个可展开和折叠的节点结构,常用于文件系统、组织架构或数据库结构的展示。TreePanel支持拖放操作,允许用户重新组织节点顺序。每个节点都可以包含子节点,...

    Extjs4 treePanel节点刷新JS函数

    完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.

    再探Ext中TreePanel控件和TabPanel控件搭配测试

    博文链接:https://jfp.iteye.com/blog/178889

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    在EXTJS这个强大的JavaScript框架中,`Ext.Panel`和`TreePanel`是两个非常重要的组件,它们被广泛用于构建复杂的用户界面。这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据...

    在VS下利用Ext4.2的TreePanel的简单demo

    4. **定义节点模型(model)**:创建一个Ext.data.Model,定义树节点的数据结构,包括字段名(fields)。 ```javascript Ext.define('TreeNode', { extend: 'Ext.data.Model', fields: ['id', 'text', 'leaf'] /...

    Extjs 加载数据库 生成tree

    通过java 访问数据库而生成节点 子节点的 ID 与 父节点的关系为“父节点id_子节点id”此id为数据库中的id 同理“父节点id_子节点id_子子节点id”,因此加载树时将node.id做为参数 通过split("_"),根据数据的长度就...

    Extjs开发之对于TreePanel的MultiSelectionModel重置不起作用

    4. **数据源同步**:如果你的数据源(如Store)在后台进行了更新,但是TreePanel没有重新加载,那么选中状态的改变可能不会反映到界面上。确保在数据源更新后,调用了`store.load()`来刷新TreePanel。 5. **渲染...

    treepanel 和 tabpanel 完整

    在本文中,我们将深入探讨`TreePanel`和`TabPanel`这两个重要的Ext JS组件,并讨论如何将它们结合在一起,以创建功能丰富的用户界面。`TreePanel`用于展示层次结构的数据,而`TabPanel`则提供了多标签页的功能,两者...

    Ext4tree与后台交互

    在"Ext4 tree与后台交互"这个主题中,我们将深入探讨如何使用Ext4的TreePanel与后端进行数据交换,以及如何处理json数据。 首先,`TreeNode.java`可能是Java后端用于表示树节点的数据类。在Java中,树节点通常包含...

    ext树的控制选择和撤销,可以直接使用

    EXT树的核心类是`Ext.tree.TreePanel`,它提供了丰富的配置项和方法来定制和操作树形结构。控制选择意味着用户可以通过交互(如点击节点)来选择一个或多个树节点,而撤销功能则允许用户撤消他们的最后一步操作,...

    Ext3.2的TreePanel和GridPanel的分页与Hibernate的分页功能的影射

    4、在工程中找到“main.js”文档,该文档中是控制应用显示GridPanel和TreePanel示例的开关 5、在IE的地址栏输入“http://localhost:8080/GridPanel”之后回车 6、如果一切正常,你会看到可以分页的表格;调整main.js...

    ExtJs4 Checkbox tree

    ExtJs4 Checkbox Tree是基于ExtJs 4框架实现的一种特殊树形组件,它在传统的树形结构基础上增加了复选框功能。这种组件常用于需要用户多选树形数据的场景,比如权限设置、目录选择等。下面将详细介绍ExtJs4 Checkbox...

    简单的EXT加载数据的例子

    本示例将详细介绍如何在EXT中加载数据,特别是通过EXT的Treepanel来呈现一个生成的树形结构。 首先,我们要理解EXT Treepanel。Treepanel是EXT中用于展示层次结构数据的组件,它可以用于创建多级目录、组织结构图等...

    Ext TreePanelrcheckbox级联选择的实现

    总之,“Ext TreePanelrcheckbox级联选择的实现”涉及了ExtJS的TreePanel组件和复选框模型的使用,通过监听事件和自定义逻辑实现了节点间的选择级联。这种功能在具有层级结构的数据选择场景中非常常见,如权限管理、...

Global site tag (gtag.js) - Google Analytics