首页 > 代码库 > Extjs4 操作TreeStore 处理proxyAjax 获取的数据
Extjs4 操作TreeStore 处理proxyAjax 获取的数据
最近在搞extjs4 TreeStore时有一个需求 就是要处理一下后台传过来的json数据然后再显示,看api也没有找到解决办法 ,最后看源码在Ext.data.proxy.Server 看到这么一个方法
[javascript] view plaincopy
- extractResponseData: function(response) {
- return response;
- },
Ext.define("App.store.MenuStore",{ extend:'Ext.data.TreeStore', model:'App.model.MenuModel', proxy:{ type:'ajax', url:app.contextPath + '/base/syresource!doNotNeedSecurity_getMainMenu.action', reader:"json", extractResponseData: function(response) { var json = Ext.loadFilter(Ext.JSON.decode(response.responseText),{parentField : 'pid'}); Ext.each(json,function(record){ if(Ext.isEmpty(record.children)){ record.expanded = false; record.leaf = true; }else{ record.expanded = true; } }); response.responseText = Ext.JSON.encode(json); return response } }, autoLoad: true });
大家都喜欢ztree的简单数据结构(扁平pid结构数据集),而Extjs并没有给我们提供,于是只有我们自己动手了。
标准的 JSON 数据需要嵌套表示节点的父子包含关系
简单模式的 JSON 数据仅需要使用 id / pId 表示节点的父子包含关系例如:
var nodes = [ {name: "父节点1", children: [ {name: "子节点1"}, {name: "子节点2"} ]} ];
例如:
var nodes = [ {id:1, pId:0, name: "父节点1"}, {id:11, pId:1, name: "子节点1"}, {id:12, pId:1, name: "子节点2"} ];
这是我希望转换的json数据
[ { "iconCls": "ext-icon-application_view_tile", "id": "xtgl", "target": "", "text": "系统管理", "url": "/welcome.jsp" }, { "iconCls": "ext-icon-newspaper_link", "id": "zygl", "pid": "xtgl", "target": "cmp", "text": "资源管理", "url": "App.view.ResourceView" }, { "iconCls": "ext-icon-tux", "id": "jsgl", "pid": "xtgl", "target": "cmp", "text": "角色管理", "url": "App.view.RoleView" }, { "iconCls": "ext-icon-group_link", "id": "jggl", "pid": "xtgl", "target": "cmp", "text": "机构管理", "url": "App.view.OrganizationView" }, { "iconCls": "ext-icon-user_suit", "id": "yhgl", "pid": "xtgl", "target": "cmp", "text": "用户管理", "url": "App.view.UserView" }, ]
ExtJs只认识嵌套的json数据,这就需要我们进行转换了,转换的方法如下:
Ext.loadFilter= function(data, opt) { var idField, textField, parentField; if (opt.parentField) { idField = opt.idField || 'id'; textField = opt.textField || 'text'; parentField = opt.parentField || 'pid'; var i, l, treeData = http://www.mamicode.com/[], tmpMap = [];>Extjs4 操作TreeStore 处理proxyAjax 获取的数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。