Extjs4 操作TreeStore 处理proxyAjax 获取的数据

最近在搞extjs4 TreeStore时有一个需求 就是要处理一下后台传过来的json数据然后再显示,看api也没有找到解决办法 ,最后看源码在Ext.data.proxy.Server 看到这么一个方法

[javascript] view
plain
copy

  1. extractResponseData: function(response) {
  2. return response;
  3. },

然后我再 proxy 中重写了这个方法

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 数据需要嵌套表示节点的父子包含关系

例如:

var nodes = [
	{name: "父节点1", children: [
		{name: "子节点1"},
		{name: "子节点2"}
	]}
];

简单模式的 JSON 数据仅需要使用 id / pId 表示节点的父子包含关系

例如:
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 = [], tmpMap = [];
		for (i = 0, l = data.length; i < l; i++) {
			tmpMap[data[i][idField]] = data[i];
		}
		for (i = 0, l = data.length; i < l; i++) {
			if (tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
				if (!tmpMap[data[i][parentField]]['children'])
					tmpMap[data[i][parentField]]['children'] = [];
				data[i]['text'] = data[i][textField];
				data[i]['leaf'] = true;//判断为叶子节点
				tmpMap[data[i][parentField]]['children'].push(data[i]);
			} else {
				data[i]['text'] = data[i][textField];
				treeData.push(data[i]);
			}
		}
		return treeData;
	}
	return data;
}
时间: 2024-08-10 14:55:50

Extjs4 操作TreeStore 处理proxyAjax 获取的数据的相关文章

接口自动化(二)--操作Excel获取需要数据

这一部分的内容记述一下对Excel表格的操作,本实战中的测试用例是由Excel来管理的,因此操作Excel是重要的一部分. 再次贴出这张图,所有的测试用例都在这个sheet内,请求数据真实存放在json文件内,表格中的请求数据列放置的是json文件内字典的key值. 操作Excel主要就是取出Excel中的case(即数据),然后执行,重点是怎样取出数据,因为有些数据是不需要的,所以不能用遍历Excel的方法来取数据. 思路一:把列数作为常量,行数作为变量来取想要的数据 思路二:把Excel中不

在链表中获取一个数据、查找操作C语言实现

SN *Get_S_Node ( SN *head ) { /* head 为要查询的链表的头指针 */ SN *Get_S_Node = NULL; INT32 OSM = 1,i32i = 0, data_num = 0; /* OSM是标志符,i32i是一个循环体内的变量,data为要获取的元素的序号 */ Get_S_Node = ( SN * )malloc( sizeof (SN) ); Get_S_Node = head; /* 输入要获取的数据 */ OSM = OSM_Prin

关于springmvc的获取前段数据和页面输出

项目的创建在这里就不写啦,如果实在不会,看看前面的,这里就直接上代码啦! 首先,是创建一个jsp文件,功能实现简单的登录功能,没什么重要的.. 这个就是简单的前段界面,这里需要注意的一点就是action="login",这里的login是一个虚拟路径, 也就是获取前端数据action的虚拟路径,要前后一致: 下面的就是获取前段数据以及验证的一种方式,这一中是比较简单的 就是在入参处获取request的对象:从而达到下面的操作 @Controllerpublic class LoginC

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

将Sql查询语句获取的数据插入到List列表里面

Sql查询语句获取的数据是分格式的,我们还用SqlDataReader来做,然后用IDataReader来接收读取,以下是代码: //我想查询一个用户表的信息,该用户有姓名,密码,信息三列 //1.定义一个用户类型的List数组,userInfo类的代码在下方 List<userInfo> userInfo = new List<userInfo>(); //2.我们要读取查询语句的数据,并且保存了.这里我们将使用IDataReader语句 //数据库类的实例,类的代码在下方 DB

Oracle中使用游标获取指定数据表的所有字段名对应的字符串

操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR(255):='STAFFDOC'; --定义要查询的数据表名变量,STAFFDOC为我测试用的数据表名,请修改成您的数据库中的对应数据表名字mystring NVARCHAR2(4000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游标          s

C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的openID,进而就能获取到更多的用户信息,这个在会员信息的场景里面用的很多,本篇介绍在网站中迅速配置这样的菜单链接,并介绍如何在后台获取相关的用户信息,实现页面数据个性化的展现操作. 我们知道,微信的自定义菜单分为两大类,分别对应Click类型和View类型的,而重定向属于View类型的一种,如下所示. 1.微信重

获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpRe

solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据

solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据 上一节我们完成了solr连接数据库,细心的朋友会发现一个问题,就是solr其实和语言没有任何关系,配置完成后任何语言都可以直接调用,本章我们主要对solr的查询做出讲解,然后就是新接触的人最关心的.net如何获取solr中的数据. 本节我准备了一个300万左右的数据表,为大家做演示 然后我们开始配置schema.xml 文件: <field name="id" type="string