ExtJs实践:支持“复杂”Json的JsonReader

从服务端返回如下的JSON:

{Id:2,Name:'Child1',Parent:{Id:1,Name:'Parent'}}

定义了如下的JsonReader来准备显示角色列表,父角色的名称影射成ParentName:

var myReader = new Ext.data.JsonReader({
   idProperty: 'id'
   root: 'rows',
   totalProperty: 'results',

   fields: [
     {name: 'Id'},
     {name: 'Name'},
     {name: 'ParentName', mapping: 'Parent.Name'}
   ]
});

当服务端传回来的JSON包含Parent,就如上面的JSON一样,这个reader能正常工作,但是当返回的 JSON中不包含Parent或者Parent为null的时候,列表就不能正常显示了:

{Id:2,Name:'Child1',Parent:null}

大家可能已经猜到mapping:’Parent.Name’也许出了问题,对,Parent为null,怎么能访问Name属性 呢,这个时候 ParentName也应该是null。但是JsonReader并没有考虑到这种情况,查看了JsonReader的 源代码,发现了下面这个方法:

getJsonAccessor: function(){
     var re = /[\[\.]/;
     return function(expr) {
       try {
         return(re.test(expr)) ?
         new Function("obj", "return obj." + expr) :
         function(obj){
           return obj[expr];
         };
       } catch(e){}
       return Ext.emptyFn;
     };
   }(),

时间: 2024-08-02 07:37:57

ExtJs实践:支持“复杂”Json的JsonReader的相关文章

ExtJs实践

假如我们程序中有产品(Product)和产品分类(Category)这2个类,前端使用 ExtJs,通过JSON格式同后端进行通讯: public class Category { public string Id { get; set; } public string Name { get; set; } } public class Product { public string Id { get; set; } public string Name { get; set; } public

Extjs Gird 支持中文拼音排序实现代码_extjs

复制代码 代码如下: <script type="text/javascript"> Ext.data.Store.prototype.applySort=function(){//重载applySort if(this.sortInfo && !this.remoteSort){ var s = this.sortInfo, f=s.field; var st=this.fields.get(f).sortType; var fn=function(r1,

实用ExtJS教程100例-011:ExtJS Form 使用JSON数据赋值和取值

上一节中我们演示了ExtJS Form的异步加载和提交数据,本节中我们将演示如何使用JSON数据为ExtJS Form中的字段赋值和取值. 系列ExtJS教程持续更新中,点击查看>>最新ExtJS教程目录 使用JSON数据为字段赋值 var formCmp = this.up("form"); var form = formCmp.getForm(); var userValues = { UserName: "Qi Fei", Email: "

eclipse中安装spket-1.6.22插件支持ExtJS 4.0.7

1 安装好eclipse(这个网上很多自己找) 2 spket支持JavaScript.XUL/XBL.Laszlo.SVG等 新产品,具有代码自动完成.语法高亮.内容概要等功能特点,可以帮助开发人员高效地创建 JavaScript程序,它可以以一个独立的桌面应用程序运行或者以Eclipse的插件运行,从它的官方网站 http://www.spket.com/可以下载,这里主要介绍它作为Eclipse插件的安装及使用方式. 3 当前最新的版本为spket-1.6.22.zip,解压后将plugi

【原创】modb 功能设计之“支持对sql语句的相关日志记录”

[需求分析] 终于到了处理 sql 日志的阶段了,万里长征重点的关键一步. 需要考虑解决的问题点如下:  在哪个模块上做 sql 日志记录 都要记录哪些信息才能做到跨机房数据同步时,具有可查询.可分析.可监控的目的 sql 日志记录的模式或者说频率 针对 MoDB 要做跨机房数据的同步这个功能,那么可以对 sql 语句进行记录的"地方"有:  modb 应用中 Atlas 应用中 其中 Atlas 目前已支持 sql 日志的记录,格式如下:  ? 1 [11/25/2013 14:58

ExtJs中使用TaskRunner和DelayedTask如何传参数到run()方法

在 ExtJs 中支持多线程的类有 Ext.util.TaskRunner 和 Ext.util.DelayedTask.TaskRunner 提供 了多线程的定时服务,DelayedTask 允许你延时多久在新建线程中执行一个任务.Ext.TaskMgr 是一个 TaskRunner 实例,在 TaskMgr.js 源码中可以看到最后一行是: Ext.TaskMgr = new Ext.util.TaskRunner(); 实质上不管是 TaskRunner 还是 DelayedTask,它们

ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互

ExtJs是一套非常不错的javascript UI库(第一次接触ExtJs的,可到官方网站http://www.extjs.com/deploy/dev/examples/samples.html看下示例.相信不少人会心动的),不仅组件丰富,效果漂亮,而且ExtJs集成的Ajax功能可以方便的与.Net的WCF进行交互. 这里我们将演示ExtJs的FormPanel从WCF加载数据,以及如何提交数据到WCF服务端 1.首先来定义一个用于传输信息的Class(实际开发中,可以是Linq to S

JSON在PHP中的应用

互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会立即想起因RSS而兴起的XML.XML的解析,恐怕已经不是什么难题了,特别是PHP5,大量的XML解析器的涌现,如最轻量级的SimpleXML.不过对于AJAX来说,XML的解析更倾向于前台Javascrīpt的支持度.我想所有解析过XML的人,都会因树和节点而头大.不可否认,XML是很不错的数据存储方式,但是其灵活恰恰造成了其解析的困难.当然,这里所指的困难,是相对于本文的主角--JSON而言. JSON为何物?我就不重复概念

MySQL 5.7的JSON数据类型详解介绍

在MySQL 5.7.8中,MySQL支持原生JSON 数据类型,使有效的数据访问在JSON(JavaScript对象符号)的文件.该 JSON数据类型提供了这些优点存储JSON格式的字符串,字符串中的列: 自动验证存储在JSON文件 JSON列.无效的文件产生错误. 优化的存储格式.存储在JSON文件 JSON列转换为内部格式,允许以文档元素快速读取权限.当服务器后来必须读取存储在此的二进制格式的JSON值,该值不必从一个文本表示解析.二进制格式的结构,以使服务器查找子对象或嵌套值直接通过按键