/**
* 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"),查找完之后,就会去加载对应的控件模块。
* 每个模块加载的时候都会在jquery的fn上扩展了一控件名字作为名称的方法属性,如"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]){
//如果已经加载过当前的控件了,这里应该是每个控件加载完成之后,都会在jquery的fn上扩展一个以改控件名称命名的属性
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);
转载请注明原文地址: https://www.6miu.com/read-67992.html