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

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

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

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

 
  1. Ext.define("App.store.MenuStore",{
  2. extend:'Ext.data.TreeStore',
  3. model:'App.model.MenuModel',
  4. proxy:{
  5. type:'ajax',
  6. url:app.contextPath + '/base/syresource!doNotNeedSecurity_getMainMenu.action',
  7. reader:"json",
  8. extractResponseData: function(response) {
  9. var json = Ext.loadFilter(Ext.JSON.decode(response.responseText),{parentField : 'pid'});
  10. Ext.each(json,function(record){
  11. if(Ext.isEmpty(record.children)){
  12. record.expanded = false;
  13. record.leaf = true;
  14. }else{
  15. record.expanded = true;
  16. }
  17. });
  18. response.responseText = Ext.JSON.encode(json);
  19. return response
  20. }
  21. },
  22. autoLoad: true
  23. });

大家都喜欢ztree的简单数据结构(扁平pid结构数据集),而Extjs并没有给我们提供,于是只有我们自己动手了。

标准的 JSON 数据需要嵌套表示节点的父子包含关系

例如:
 
  1. var nodes = [
  2. {name: "父节点1", children: [
  3. {name: "子节点1"},
  4. {name: "子节点2"}
  5. ]}
  6. ];

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

例如:
 
  1. var nodes = [
  2. {id:1, pId:0, name: "父节点1"},
  3. {id:11, pId:1, name: "子节点1"},
  4. {id:12, pId:1, name: "子节点2"}
  5. ];

这是我希望转换的json数据

 
  1. [
  2. {
  3. "iconCls": "ext-icon-application_view_tile",
  4. "id": "xtgl",
  5. "target": "",
  6. "text": "系统管理",
  7. "url": "/welcome.jsp"
  8. },
  9. {
  10. "iconCls": "ext-icon-newspaper_link",
  11. "id": "zygl",
  12. "pid": "xtgl",
  13. "target": "cmp",
  14. "text": "资源管理",
  15. "url": "App.view.ResourceView"
  16. },
  17. {
  18. "iconCls": "ext-icon-tux",
  19. "id": "jsgl",
  20. "pid": "xtgl",
  21. "target": "cmp",
  22. "text": "角色管理",
  23. "url": "App.view.RoleView"
  24. },
  25. {
  26. "iconCls": "ext-icon-group_link",
  27. "id": "jggl",
  28. "pid": "xtgl",
  29. "target": "cmp",
  30. "text": "机构管理",
  31. "url": "App.view.OrganizationView"
  32. },
  33. {
  34. "iconCls": "ext-icon-user_suit",
  35. "id": "yhgl",
  36. "pid": "xtgl",
  37. "target": "cmp",
  38. "text": "用户管理",
  39. "url": "App.view.UserView"
  40. },
  41. ]

ExtJs只认识嵌套的json数据,这就需要我们进行转换了,转换的方法如下:

 
  1. Ext.loadFilter= function(data, opt) {
  2. var idField, textField, parentField;
  3. if (opt.parentField) {
  4. idField = opt.idField || 'id';
  5. textField = opt.textField || 'text';
  6. parentField = opt.parentField || 'pid';
  7. var i, l, treeData = [], tmpMap = [];
  8. for (i = 0, l = data.length; i < l; i++) {
  9. tmpMap[data[i][idField]] = data[i];
  10. }
  11. for (i = 0, l = data.length; i < l; i++) {
  12. if (tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
  13. if (!tmpMap[data[i][parentField]]['children'])
  14. tmpMap[data[i][parentField]]['children'] = [];
  15. data[i]['text'] = data[i][textField];
  16. data[i]['leaf'] = true;//判断为叶子节点
  17. tmpMap[data[i][parentField]]['children'].push(data[i]);
  18. } else {
  19. data[i]['text'] = data[i][textField];
  20. treeData.push(data[i]);
  21. }
  22. }
  23. return treeData;
  24. }
  25. return data;
  26. }

原文地址http://www.bieryun.com/2061.html

Extjs4操作TreeStore处理proxyAjax获取的数据相关推荐

  1. JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询

    JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技 ...

  2. 从后台获取的数据渲染到页面中的dom操作

    很多情况下页面dom都是从后台拼接字符串添加生成的新的dom元素,在编辑器中不能看到,只能通过检查看到页面的dom结构,但是这时候会发生一个问题,就是如果使用jQuery无法进行dom操作,事件和方法 ...

  3. 【微信小程序-原生开发】实用教程08 - 开通微信云开发,操作云数据库新增数据(含修改数据权限),初始化云服务(含获取微信云环境 id),获取云数据,滚动公告栏

    开始前,请先完成圆梦宝典中宫格导航的开发,详见 [微信小程序-原生开发]实用教程 07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字) https://blog.csdn.net ...

  4. 剖析遍历抓取的html标签数据,Jquery遍历数组(包括获取后端数据后的操作)和遍历标签(class名)...

    //遍历数组(获取后端数据如何遍历操作) var status  = 1;   //自定义状态 $('.tables-detail').html("");     //调用ajax ...

  5. Python Appium 模拟人为操作获取app数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.appium是什么? 二.使用步骤 1.准备环境 2.实现思路 3.项目实现 总结 前言 用appium 模拟人滑 ...

  6. NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045

    然后我们来看,如何从mysql中,进行分页获取数据,然后把数据导入到hbase中去,这里 刚开始是通过phoenix,想通过phoenix来操作hbase, 但是弄了好久啊...报错...不知道为什么 ...

  7. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  8. dojo从asp.net中获取json数据

    搞来有搞去终于有了个结果,主要是一开始犯了一些低级错误. 对于json不太了解的童鞋,可以看看这个:http://www.dreamdu.com/blog/2008/10/19/json_in_jav ...

  9. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  10. vue从后台获取新数据后刷新_vue项目中实现定时刷新页面(重新渲染数据实时更新)...

    需求: 每隔一分钟自动刷新一下当前页面,同时发送请求,重新渲染数据,以到达实时更新. 开始: js有两种定时器 setInterval(function(){}, milliseconds)--会不停 ...

最新文章

  1. 匿名黑客Anonymous实施的8次最强攻击
  2. 【Android视图效果】共享元素实现仿微信查看大图效果
  3. 软件测试需要什么样的思维,你知道软件测试的核心价值是什么吗?为什么我们需要软件测试?...
  4. 二、OC的构造方法和descriprtion方法
  5. stm32基本定时器
  6. 八皇后问题c语言循环,八皇后问题的12组解
  7. Kaggle实战之食尸鬼、地精、鬼魂分类
  8. Android计算器 (课程设计项目)
  9. IE浏览器查看浏览器缓存Session
  10. CentOS系统编译部署nginx-http-flv-module模块搭建流媒体服务器
  11. ps怎么撤销参考线_ps里怎么把参考线去掉
  12. java.lang.UnsatisfiedLinkError: Couldn't load XXX
  13. golang 字符串转整形 string 转 int ,go string 转 int
  14. 在面试时候,如何简明扼要简述产品流程
  15. 平台服务器型号,云平台服务器型号
  16. 开关电源和普通电源有什么区别?
  17. ffmpeg自定义编解码器
  18. Scala核心编程 第一章—Scala语言概述
  19. 5. Mandy Len Catron: Falling in love is the easy part | TED Talk
  20. VMD结合ISSA优化LSSVM功率预测

热门文章

  1. 【翻译】InterlockedIncrement内部是如何实现的?
  2. SQL 通配符 、分页 功能的学习
  3. leetcode刷题日记-825. 适龄的朋友
  4. 【LeetCode】【数组】题号:*645,重复数字和缺失数字
  5. 从零基础入门Tensorflow2.0 ----八、43. 自定义流程分布式
  6. 从零基础入门Tensorflow2.0 ----五、26TF1.0tf_data,make_initializable_iteror()
  7. ENVI入门系列教程---一、数据预处理---4.1 遥感图像正射校正
  8. mean shift
  9. JS学习总结(12)——Math对象/时间对象
  10. linux系统管理Linux系统实验,实验三 linux系统管理.doc