`
y1d2y3xyz
  • 浏览: 260212 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Extjs源码之-- Ext.util.JSON

阅读更多
很多写extjs的朋友说,Extjs的源码之间的关系太紧了,所以不能像其他很多框架那样,能分模块按需加载,但Ext很难做到,其实这确实是存在这样的问题,但如果作为一个框架,代码之间没有依赖性,那这代码必然不是最精简的,但其实Ext的很多代码还是依赖性很小的,自己稍微加工一下就可以做成自己需要的工具函数用!看代码

//JSON对象和String对象转化
Ext.util.JSON = {
	//格式化数字<10的前面补0
	pad : function(n) {
		return n < 10 ? "0" + n : n;
	},
	//把字符串转化为JSON格式
	decode:function(json){
		return eval("(" + json + ')'); 
	},
	//把JSON对象转化为字符串
	encode:function(o){
		if(typeof o == "undefined" || o === null){
			return "null";
		}else if(Ext.isArray(o)){//数组
            var a = ["["], b, i, l = o.length, v;
			for (i = 0; i < l; i++) {
				v = o[i];
				switch (typeof v) {
					case "undefined":
					case "function":
					case "unknown":
						break;
					default:
						if (b) {
							a.push(',');
						}
						a.push(v === null ? "null" : Ext.util.JSON.encode(v));
						b = true;
				}
			}
			a.push("]");
			return a.join("");
		}else if(Ext.isDate(o)){//日期对象
			return '"' + o.getFullYear() + "-" +
				Ext.util.JSON.pad(o.getMonth() + 1) + "-" +
				Ext.util.JSON.pad(o.getDate()) + " " +
				Ext.util.JSON.pad(o.getHours()) + ":" +
				Ext.util.JSON.pad(o.getMinutes()) + ":" +
				Ext.util.JSON.pad(o.getSeconds()) + '"';
		}else if(typeof o == "string"){//字符串,转义回车换行,双引号,反斜杠...等
			var m = {
					"\b": '\\b',
					"\t": '\\t',
					"\n": '\\n',
					"\f": '\\f',
					"\r": '\\r',
					'"' : '\\"',
					"\\": '\\\\'
			};
            if (/["\\\x00-\x1f]/.test(o)) {
                return '"' + o.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                    var c = m[b];
                    if(c){
                        return c;
                    }
                    c = b.charCodeAt();
                    return "\\u00" +
                        Math.floor(c / 16).toString(16) +
                        (c % 16).toString(16);
                }) + '"';
            }
            return '"' + o + '"';
		}else if(typeof o == "number"){
			return isFinite(o) ? String(o) : "null";
		}else if(typeof o == "boolean"){
			return String(o);
		}else {//json格式的对象
			var a = ["{"], b, i, v;
			for (i in o) {
				v = o[i];
				switch (typeof v) {
				case "undefined":
				case "function":
				case "unknown":
					break;
				default:
					if(b){
						a.push(',');
					}
					a.push(Ext.util.JSON.encode(i), ":", v === null ? "null" : Ext.util.JSON.encode(v));
					b = true;
				}
			}
			a.push("}");
			return a.join("");
		}    
	}
};
Ext.encode = Ext.util.encode;
Ext.decode = Ext.util.decode;
分享到:
评论

相关推荐

    Extjs中文教程

    - JSON-LIB是一个用于解析JSON数据的JavaScript库。 - 在Extjs中通常使用原生的JSON解析功能。 - **分页工具栏** - 分页工具栏提供了一组按钮,用于控制表格的分页操作。 - 包括上一页、下一页...

    ext-3.2.0源码

    `ext-3.2.0` 是这个版本的核心源码目录,里面包含了所有ExtJS框架的基础文件和资源。这个目录下通常会包括以下几个关键部分: 1. `adapter`: 这个目录包含了不同JavaScript库适配器,如ExtJS对jQuery或Prototype的...

    ext-3.0框架源码

    4. **AJAX和JSON**:EXT 3.0提供了强大的AJAX通信机制,可以轻松与服务器进行异步交互,同时支持JSON数据格式,便于前后端数据交换。 5. **布局管理**:EXT 3.0拥有多种布局方式,如Fit布局、Border布局、Table布局...

    EXTJS desktop 国际化

    EXTJS提供了`Ext.Date`和`Ext.util.Format`类来处理这些格式,可以根据不同的语言和地区设置合适的格式规则。 5. **工具支持**: - 标签“工具”可能是指EXTJS提供的一些辅助工具,如构建工具或者IDE插件,它们...

    Extjs4.0视频教程和源代码,另附文档翻译

    - **新特性概览**:介绍了Extjs4.0相对于前几个版本的主要改进之处,如新的UI组件、增强的性能、更好的响应式设计支持等。 - **演示与实践**:通过多个实例展示了这些新特性的具体用法,帮助开发者快速上手并利用...

    extjs3.0例子

    7. **Ext.util.Event**: EXTJS的事件系统,允许组件之间进行通信。通过`addListener`(或`on`)方法监听事件,`fireEvent`触发事件。 在“extjs3.0例子”中,你可以通过源码学习如何实例化这些对象,如何配置它们的...

Global site tag (gtag.js) - Google Analytics