JQuery-easyui 分析(1)

     下载了jquery-easyui的源码,做简单分析。

     easyui的代码库结构很简单。n个控件(widget)的文件(比如jquery.calendar.js, 一看就明白它是日历组件咯)加上两个基础文件--easyloader.js 和parser.js;

     easyloader.js 话说是负责加载每个widget的Js文件和css文件的,当然也负责把parser.js给load近来。

  首先看看easyloader.js:

   这个js里有一个modules对象:

var modules={messager:{
js:'jquery.messager.js',
css:'messager.css',
dependencies:['linkbutton','window','progressbar']
},
//... 省略其他
}

 这个代码段messager自然是easyui里一个widget,js,css属性都是widget对应的文件名;

dependencies 是依赖项;也就是说加载messager的时候先要把linkbutton,window,progressbar先加载进来。

加载widget的方法一目了然,是loadJS,loadCss,loadModule 这几个方法。

二:Parser.JS
    easyui的widget都是声明式的,比如:  <a href="#"  class="easyui-linkbutton" data-options="iconCls:'icon-add'">Add</a>  

 声明class为easyui-linkbutton,则easyui库会把这个超链接变成按钮。 那么easyui库就必须读到这个class,然后转换。

转换在parser.js 的parse方法中进行。

     在parser.js 中有一个plugins数组,保存了所有easyui的widget名称,如下代码:

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方法循环数组,每循环到一个widget名,就从网页中获取相关的jquery对象

parse: function(context){
var aa = [];
for(var i=0; i<$.parser.plugins.length; i++){  //循环widget数组
var name = $.parser.plugins[i];
var r = $('.easyui-' + name, context); //从网页中查找shen
if (r.length){
  if (r[name]){
  r[name]();
} else {
  aa.push({name:name,jq:r});
}
}
}

 

余下就是调用easyloader进行加载了。

 

有一个问题还没明白,当把所有的widget合并到一个js文件里的时候,easyloader的load方法,还需要么?这个要继续分析他的代码了。。

很可惜,下载的代码并不是最新的版本。作者似乎故意只发上一个版本的源码。最新的技术,国之利器,不可示人啊。

 

 

posted on 2012-10-23 21:45  xinchuang  阅读(4556)  评论(0编辑  收藏  举报