- 浏览: 316502 次
- 性别:
文章分类
最新评论
-
i042416:
分析在哪?
angular分析 -
何盆盆:
你好,请问您这是Extjs3还是Extjs4
ExtJs源码分析与学习—ExtJs事件机制(一) -
124753561:
引用引用引用引用引用[u][u][u][u][i][i][i] ...
Subvision SVN 服务端与客户端的安装 -
谷超:
请问一下例子中itext是什么版本的?
利用iText生成word文档例子参考 -
geosmart:
正好要用到执行字符串中方法,学习了
java中利用反射机制实现调用给定为字符串的方法名
接上篇
下面介绍Ext.js中其他核心方法
Ext.namespace,用来管理Ext库命名空间的方法
namespace : function(){ var o, d; Ext.each(arguments, function(v) {//循环遍历所传的参数 d = v.split(".");//返回字符串数组 o = window[d[0]] = window[d[0]] || {};//把数组第一个元素作为window对象的一个子对象 Ext.each(d.slice(1), function(v2){//再把数组中其他元素按顺序作为o的子对象,注意是逐级的,即第二个元素是o的子对象,第三个元素是o的子对象的子对象,依次类推 o = o[v2] = o[v2] || {}; }); }); return o; },
该方法实现了js命名空间的管理,类似于java包结构,其Ext.ns是该方法的简写,Ext.namespace中用到了方法Ext.each
each : function(array, fn, scope){ if(Ext.isEmpty(array, true)){ return; } //判断array是否可迭代,对于数组、NodeList、HTMLCollection都是可迭代的,即返回true。 //或者是字符型,数字型和布尔型时直接封装成数组 if(!Ext.isIterable(array) || Ext.isPrimitive(array)){ array = [array]; } for(var i = 0, len = array.length; i < len; i++){ //fn的第一个参数为集合元素,第二个参数i为索引,第三个参数为被迭代元素自身 if(fn.call(scope || array[i], array[i], i, array) === false){ return i; }; } },
首先判断第一个参数array是否为数组,如果为空直接返回。接着判断array是否可迭代,对于数组、NodeList、HTMLCollection都是可迭代的,即返回true。不可迭代的,如基本类型的字符串,数字等会将其包装成数组。接着就是for循环,回调函数fn,fn的执行上下文scope,scope如果没有传默认为array[i],即在fn内使用this取到集合的每一个元素。fn的第一个参数为集合元素,第二个参数i为索引,第三个参数为被迭代元素自身。
最后还有个技巧,可以在fn内使用某个条件为false如 return i=3 来终止迭代,这时候会返回迭代最后一次的索引i。
可以看到 Ext.each 的用法与 JQuery.each 类似,不同之处在于Ext.each的第三个参数可以指定回调函数的执行上下文,JQuery.each 的第三个参数仅供库内部使用。
Ext.each 调用了方法Ext.isEmpty,用来判断对象是否为空
isEmpty : function(v, allowBlank){ return v === null || v === undefined || ((Ext.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false); },
如果传入的值是null、undefined或空字符串或空数组,则返回true。
allowBlank(可选的)如果该值为true,则空字符串不会当作空而返回true。
Ext.isEmpty中调用了Ext.isArray,用来判断是否为数组
isArray : function(v){ return toString.apply(v) === '[object Array]'; },
Ext.toArray 方法实现了把可迭代的对象转换为数组,该方法也是一个匿名函数自执行,执行后返回的function才是真正的Ext.toArray
toArray : function(){ return isIE ? function(a, i, j, res){ res = []; for(var x = 0, len = a.length; x < len; x++) { res.push(a[x]); } return res.slice(i || 0, j || res.length); } : function(a, i, j){ return Array.prototype.slice.call(a, i || 0, j || a.length); }; }(),
该方法有三个参数,如果只传入a,则取可迭代的所有元素
可以看到实现时对浏览器进行了判断,IE使用for循环的遍历 伪数组 ,将其push到res中。非IE浏览器则使用Array.prototype.slice。
IE中为何不能使用Array.prototype.slice呢,对于NodeList等并非一个JavaScript object。会抛异常。怿飞 总结过。
然而,随着IE9 beta的发布,IE9中已经将javascript引擎内置在浏览器中,IE9 中Array.prototype.slice.call(NodeList) 已经不再抛异常了,可以使用其将NodeList等转换为数组。因此Ext.isIE这个条件改为 Ext.isIE6||Ext.isIE7||Ext.isIE8 则较为合理了。之前DOM的错误实现也部分修复了,相关 Blog 。
Ext.iterate 方法
//这是一个通用迭代器,可以迭代数组,也可以是对象 iterate : function(obj, fn, scope){ if(Ext.isEmpty(obj)){ return; } if(Ext.isIterable(obj)){ Ext.each(obj, fn, scope); return; }else if(typeof obj == 'object'){ for(var prop in obj){ if(obj.hasOwnProperty(prop)){ if(fn.call(scope || obj, prop, obj[prop], obj) === false){ return; }; } } } },
urlDecode
把一个已经encoded的URL字符串转换为对象。如Ext.urlDecode("foo=1&bar=2"); 就是{foo: "1", bar: "2"}; Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false);就是{foo: "1", bar: ["2", "3", "4"]}。
overwrite (可选的)重复名称的就当作为数组,如果该项为true就禁止该功能(默认为false)。
urlAppend
//追加url参数
getDom
返回dom对象,参数可以是string(id),dom node,或Ext.Element。
getBody
返回当前document.body的Ext.Element 类型。
getHead
返回当前document.head的Ext.Element 类型。
removeNode
移除document的DOM节点。如果是body节点的话会被忽略。
isDate
返回true表名送入的对象是JavaScript的date类型对象,否则为false。
还有常用的isObject、isPrimitive(是否为字符数字或布尔型)、isFunction、isNumber、isString、isBoolean、isElement、isDefined(是否为undefined)
其他的方法就是一些判断浏览器类型和版本以及操作系统等,这里就不罗列了,详细查看源代码
发表评论
-
ExtJs源码分析与学习—Ext.ToolTip应用
2011-12-29 14:18 1803源码待分析,先粘一例子备用 // ... -
ExtJs源码分析与学习—遮罩层
2011-09-06 16:49 4743类Ext.LoadMask ... -
ExtJs源码分析与学习—Ext.UpdateManager
2011-09-06 16:12 2141如果想让html页面中任意元素自动局部刷新,而不是整 ... -
ExtJs源码分析与学习—ExtJs元素Element(六)
2011-06-08 10:41 1763批量操作元素Ext.CompositeElementLite ... -
ExtJs源码分析与学习—ExtJs元素Element(五)
2011-06-07 17:35 1898元素的查询Ext.DomQuery 该 ... -
ExtJs源码分析与学习—ExtJs元素Element(四)
2011-06-07 17:17 2951元素的操作Ext.DomHelper ... -
ExtJs源码分析与学习—ExtJs元素Element(三)
2011-06-07 17:06 1014Ext.Element扩展 通过Ex ... -
ExtJs源码分析与学习—ExtJs元素Element(二)
2011-06-07 16:42 2586元素操作核心类Ext.Elemen ... -
ExtJs源码分析与学习—ExtJs元素Element(一)
2011-06-07 15:47 2091从这一节开始 ... -
ExtJs源码分析与学习—工具类Ext.util.TextMetrics
2011-06-07 15:11 2010Ext提供了一个 ... -
ExtJs源码分析与学习—ExtJs事件机制(六)
2011-06-07 11:25 1448最后把涉及到Ext事件的相关类图贴到这里 ... -
ExtJs源码分析与学习—ExtJs事件机制(五)
2011-06-07 11:15 3023最近一直忙着做产品,所以好久没有写文章了,下面接着 ... -
Ext 组件操作总结——会不断完善
2011-05-10 16:36 26581、Ext.Component 该组件在渲染的时候会默认的 ... -
ExtJs表单几种验证与扩展
2011-05-03 16:26 4862首先说明一下表单验证与其相关的一些设置 Ext ... -
ExtJs源码分析与学习—ExtJs事件机制(四)
2011-03-19 23:37 5276ExtJs组件事件——ExtJs自定义事件的处理 ... -
ExtJs源码分析与学习—ExtJs事件机制(三)
2011-03-15 20:20 3182这篇讲ExtJs对事件的管理和调用 Ext ... -
ExtJs源码分析与学习—ExtJs事件机制(二)
2011-03-15 20:15 2526在ExtJs源码分析与学习—ExtJs事件机制( ... -
ExtJs源码分析与学习—ExtJs事件机制(一)
2011-03-15 18:53 2761前面讲了ExtJs核 ... -
ExtJs源码分析与学习—ExtJs核心代码扩展
2011-01-20 19:16 2048前面三篇文章参考作者snandy总结了Ext中核心 ... -
ExtJs源码分析与学习—ExtJs核心代码(三)
2011-01-17 17:29 2130Ext为javascript的一些对象进行了扩展,主要有Str ...
相关推荐
NULL 博文链接:https://linder0209.iteye.com/blog/865372
NULL 博文链接:https://linder0209.iteye.com/blog/882451
ExtJS3.0 源码分析与开发实例宝典
资源名称:Ext JS源码分析与开发实例宝典内容简介:本书全面系统地剖析了ExtJS 3.0的架构设计原理。通过对源码的“抽丝剥茧”,读者可以掌握Ext JS架构的精妙,从原理层面用活Ext JS。此外,本书还提出了大量的解决...
这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...
这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...
这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...
这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...
Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...
Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...
《ExtJS源码分析与开发实例宝典》是一本不错的关于ExtJS开发实践的教程,特附上源码,与各位共享,谢谢。
ExtJS源码分析与开发实例宝典完整版 1、JS画图部分代码在IE8上看不到效果,因为IE8不支持VML。 2、扩展的组件为作者独立完成,仅供学习之用,一些组件并没有经过严格的测试。 如果需要用到项目之中,请自行测试。 ...
ExtJS源码分析与开发实例宝典第二部分
extjs 源码,有兴趣的可以学习下
extjs源码分析与实例开发宝典PDF格式
extjs源码分析与开发实例宝典PDF格式文件