首页 > 代码库 > EasyUI学习总结(三)——easyloader源码分析

EasyUI学习总结(三)——easyloader源码分析

 

EasyUI学习总结(三)——easyloader源码分析

  easyloader模块是用来加载jquery easyui的js和css文件的,而且它可以分析模块的依赖关系,先加载依赖项。模块加载好了会调用parse模块来解析页面。把class是easyui开头的标签都转化成easyui的控件。

先看Demo1例子,再分析源代码。

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <title>easyloader范例</title>
 5     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 6   <!-- 引入JQuery -->
 7   <script type="text/javascript" src="http://www.mamicode.com/jquery-easyui-1.4.1/jquery.min.js"></script>
 8   <!-- 引入easyloader.js -->
 9   <script type="text/javascript" src="http://www.mamicode.com/jquery-easyui-1.4.1/easyloader.js"></script>
10   </head>
11   
12   <body>
13       <div class="easyui-panel" title="Demo1" fit="false" 
14       collapsible="true" minimizable="true" maximizable="true" closable="true" style="width:100%; height: 200px;" >
15         easyloader会自动解析这个div,因为class属性中带有easyui开头的类!
16     </div>
17   </body>
18 </html>

  运行结果如下所示:

  技术分享

easyloader源码分析

  1 /**
  2  * easyloader - jQuery EasyUI
  3  * 
  4  * Licensed under the GPL:
  5  *   http://www.gnu.org/licenses/gpl.txt
  6  *
  7  * Copyright 2010 stworthy [ stworthy@gmail.com ] 
  8  * 
  9  */
 10 (function(){
 11     // 模块文件定义
 12     var modules = {
 13         draggable:{
 14             js:‘jquery.draggable.js‘
 15         },
 16         droppable:{
 17             js:‘jquery.droppable.js‘
 18         },
 19         resizable:{
 20             js:‘jquery.resizable.js‘
 21         },
 22         linkbutton:{
 23             js:‘jquery.linkbutton.js‘,
 24             css:‘linkbutton.css‘
 25         },
 26         pagination:{
 27             js:‘jquery.pagination.js‘,
 28             css:‘pagination.css‘,
 29             dependencies:[‘linkbutton‘]
 30         },
 31         datagrid:{
 32             js:‘jquery.datagrid.js‘,
 33             css:‘datagrid.css‘,
 34             dependencies:[‘panel‘,‘resizable‘,‘linkbutton‘,‘pagination‘]
 35         },
 36         treegrid:{
 37             js:‘jquery.treegrid.js‘,
 38             css:‘tree.css‘,
 39             dependencies:[‘datagrid‘]
 40         },
 41         panel: {
 42             js:‘jquery.panel.js‘,
 43             css:‘panel.css‘
 44         },
 45         window:{
 46             js:‘jquery.window.js‘,
 47             css:‘window.css‘,
 48             dependencies:[‘resizable‘,‘draggable‘,‘panel‘]
 49         },
 50         dialog:{
 51             js:‘jquery.dialog.js‘,
 52             css:‘dialog.css‘,
 53             dependencies:[‘linkbutton‘,‘window‘]
 54         },
 55         messager:{
 56             js:‘jquery.messager.js‘,
 57             css:‘messager.css‘,
 58             dependencies:[‘linkbutton‘,‘window‘]
 59         },
 60         layout:{
 61             js:‘jquery.layout.js‘,
 62             css:‘layout.css‘,
 63             dependencies:[‘resizable‘,‘panel‘]
 64         },
 65         form:{
 66             js:‘jquery.form.js‘
 67         },
 68         menu:{
 69             js:‘jquery.menu.js‘,
 70             css:‘menu.css‘
 71         },
 72         tabs:{
 73             js:‘jquery.tabs.js‘,
 74             css:‘tabs.css‘,
 75             dependencies:[‘panel‘,‘linkbutton‘]
 76         },
 77         splitbutton:{
 78             js:‘jquery.splitbutton.js‘,
 79             css:‘splitbutton.css‘,
 80             dependencies:[‘linkbutton‘,‘menu‘]
 81         },
 82         menubutton:{
 83             js:‘jquery.menubutton.js‘,
 84             css:‘menubutton.css‘,
 85             dependencies:[‘linkbutton‘,‘menu‘]
 86         },
 87         accordion:{
 88             js:‘jquery.accordion.js‘,
 89             css:‘accordion.css‘,
 90             dependencies:[‘panel‘]
 91         },
 92         calendar:{
 93             js:‘jquery.calendar.js‘,
 94             css:‘calendar.css‘
 95         },
 96         combo:{
 97             js:‘jquery.combo.js‘,
 98             css:‘combo.css‘,
 99             dependencies:[‘panel‘,‘validatebox‘]
100         },
101         combobox:{
102             js:‘jquery.combobox.js‘,
103             css:‘combobox.css‘,
104             dependencies:[‘combo‘]
105         },
106         combotree:{
107             js:‘jquery.combotree.js‘,
108             dependencies:[‘combo‘,‘tree‘]
109         },
110         combogrid:{
111             js:‘jquery.combogrid.js‘,
112             dependencies:[‘combo‘,‘datagrid‘]
113         },
114         validatebox:{
115             js:‘jquery.validatebox.js‘,
116             css:‘validatebox.css‘
117         },
118         numberbox:{
119             js:‘jquery.numberbox.js‘,
120             dependencies:[‘validatebox‘]
121         },
122         spinner:{
123             js:‘jquery.spinner.js‘,
124             css:‘spinner.css‘,
125             dependencies:[‘validatebox‘]
126         },
127         numberspinner:{
128             js:‘jquery.numberspinner.js‘,
129             dependencies:[‘spinner‘,‘numberbox‘]
130         },
131         timespinner:{
132             js:‘jquery.timespinner.js‘,
133             dependencies:[‘spinner‘]
134         },
135         tree:{
136             js:‘jquery.tree.js‘,
137             css:‘tree.css‘,
138             dependencies:[‘draggable‘,‘droppable‘]
139         },
140         datebox:{
141             js:‘jquery.datebox.js‘,
142             css:‘datebox.css‘,
143             dependencies:[‘calendar‘,‘validatebox‘]
144         },
145         parser:{
146             js:‘jquery.parser.js‘
147         }
148     };
149     
150     // 国际化资源文件
151     var locales = {
152         ‘af‘:‘easyui-lang-af.js‘,
153         ‘bg‘:‘easyui-lang-bg.js‘,
154         ‘ca‘:‘easyui-lang-ca.js‘,
155         ‘cs‘:‘easyui-lang-cs.js‘,
156         ‘da‘:‘easyui-lang-da.js‘,
157         ‘de‘:‘easyui-lang-de.js‘,
158         ‘en‘:‘easyui-lang-en.js‘,
159         ‘fr‘:‘easyui-lang-fr.js‘,
160         ‘nl‘:‘easyui-lang-nl.js‘,
161         ‘zh_CN‘:‘easyui-lang-zh_CN.js‘,
162         ‘zh_TW‘:‘easyui-lang-zh_TW.js‘
163     };
164     
165     // 加载队列
166     var queues = {};
167     
168     /**
169      * 加载js文件函数,过程就是动态创建一个script标签,然后添加到head标签中去。
170      * 有一个问题是监听了script标签的两个事件函数,一个是onload,另一个是onreadystatechange,这个数要是针对IE和非IE浏览器准备的
171      * 万恶的IE浏览器!!!
172      */
173     function loadJs(url, callback){
174         var done = false;
175         var script = document.createElement(‘script‘);
176         script.type = ‘text/javascript‘;
177         script.language = ‘javascript‘;
178         script.src = http://www.mamicode.com/url;"head")[0].appendChild(script);
189     }
190     
191     /**
192      * 执行js文件。就是把js文件加载进来,再remove掉
193      * @param url js的url
194      * @callback 回调函数,执行完js时会调用这个函数
195      */
196     function runJs(url, callback){
197         loadJs(url, function(){
198             document.getElementsByTagName("head")[0].removeChild(this);
199             if (callback){
200                 callback();
201             }
202         });
203     }
204     
205     /**
206      * 加载css文件。和加载js文件一样,动态创建一个link标签,然后追加到head标签中去
207      * @param url css的url
208      * @param callback 回调函数,加载完成后调用此函数
209      */
210     function loadCss(url, callback){
211         var link = document.createElement(‘link‘);
212         link.rel = ‘stylesheet‘;
213         link.type = ‘text/css‘;
214         link.media = ‘screen‘;
215         link.href = http://www.mamicode.com/url;>

  到这里easyloader就分析结束了,如果你仔细看过了,相信一定会使用easyloader了

EasyUI学习总结(三)——easyloader源码分析