jquery.parser源码解析

来源:互联网 发布:linux 批量删除文件名 编辑:程序博客网 时间:2024/05/19 15:19
/** * parser - jQuery EasyUI *  * Licensed under the GPL terms * To use it on other terms please contact us * * Copyright(c) 2009-2012 stworthy [ stworthy@gmail.com ]  *  *//** * 解析器,首先会根据自定义的控件的名称,去页面上去查找使用了这个控件名称定义了类的元素,:控件"linkbutton"将会去页面上查找$(".easyui-linkbutton"),查找完之后,就会去加载对应的控件模块。 * 每个模块加载的时候都会在jqueryfn上扩展了一控件名字作为名称的方法属性,"linkbutton"控件注册了"$.fn.linkbutton = function(options){...}" * 控件加载全部加载完成之后就针对每一个html元素调用控件的构造方法,于是一个控件就在页面上渲染完成了. * * */(function($){   $.parser = {      auto: true,      onComplete: function(context){},      //下面是支持的插件的名字,例如linkbutton代表".easyui-linkbutton"      plugins:['linkbutton','menu','menubutton','splitbutton','progressbar',             'tree','combobox','combotree','numberbox','validatebox','searchbox',             'numberspinner','timespinner','calendar','datebox','datetimebox','slider',             'layout','panel','datagrid','propertygrid','treegrid','tabs','accordion','window','dialog'      ],      parse: function(context){         //解析使用easyui样式定义的html元素         //存储查找到引用了指定名称控件的名字和对应的元素,:[{name:"linkbutton",jq:$(".easyui-linkbutton")]         var aa = [];         for(var i=0; i<$.parser.plugins.length; i++){            //控件的名字,:linkbutton            var name = $.parser.plugins[i];            //选中使用的控件的html元素集合,:$(".easyui-linkbutton")            var r = $('.easyui-' + name, context);            if (r.length){               if (r[name]){                  //如果已经加载过当前的控件了,这里应该是每个控件加载完成之后,都会在jqueryfn上扩展一个以改控件名称命名的属性                  r[name]();               } else {                  //将控件的名字和查找到使用了该控件的html元素保存到数组中,[{name:"linkbutton",jq:$(".easyui-linkbutton")]                  aa.push({name:name,jq:r});               }            }         }         if (aa.length && window.easyloader){            var names = [];//存储查找到的所有控件的名字,:["linkbutton"]            for(var i=0; i<aa.length; i++){               names.push(aa[i].name);            }            //使用easyloader组件去加载这些使用到了的控件            easyloader.load(names, function(){               //加载完所有控件后,依次调用每个控件对应的方法               for(var i=0; i<aa.length; i++){                  var name = aa[i].name;                  var jq = aa[i].jq;                  //下面的调用形式例子:$(".easyui-linkbutton")["linkbutton"]()                  jq[name]();               }               $.parser.onComplete.call($.parser, context);            });         } else {            $.parser.onComplete.call($.parser, context);         }      }   };   $(function(){      //如果没有加载过easyloader.js文件的话,就执行方法$.parser.parse(),因为easyloader.js脚本里已经向页面初始化函数里注册了加载并执行parser脚本和方法:$.parser.parse()      if (!window.easyloader && $.parser.auto){         //如果已经加载过easyloader.js脚本的话,下面的函数是不会被执行的         $.parser.parse();      }   });})(jQuery);
原创粉丝点击