前言

扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象。下载该插件翻译源码

源码

/**
* jQuery EasyUI 1.3.2
*
*翻译; qq 1364386878
*/
(function () {
//预定义模块
//将所有的插件,和插件资源和依赖文件放进modules对象中。
var modules = {
draggable: { js: "jquery.draggable.js" },
droppable: { js: "jquery.droppable.js" },
resizable: { js: "jquery.resizable.js" },
linkbutton: { js: "jquery.linkbutton.js", css: "linkbutton.css" },
progressbar: { js: "jquery.progressbar.js", css: "progressbar.css" },
pagination: { js: "jquery.pagination.js", css: "pagination.css", dependencies: ["linkbutton"] },
datagrid: {
js: "jquery.datagrid.js", css: "datagrid.css",
dependencies: ["panel", "resizable", "linkbutton", "pagination"]
},
treegrid: { js: "jquery.treegrid.js", css: "tree.css", dependencies: ["datagrid"] },
propertygrid: { js: "jquery.propertygrid.js", css: "propertygrid.css", dependencies: ["datagrid"] },
panel: { js: "jquery.panel.js", css: "panel.css" },
window: {
js: "jquery.window.js", css: "window.css",
dependencies: ["resizable", "draggable", "panel"]
},
dialog: { js: "jquery.dialog.js", css: "dialog.css", dependencies: ["linkbutton", "window"] },
messager: {
js: "jquery.messager.js", css: "messager.css",
dependencies: ["linkbutton", "window", "progressbar"]
},
layout: {
js: "jquery.layout.js", css: "layout.css",
dependencies: ["resizable", "panel"]
},
form: { js: "jquery.form.js" },
menu: { js: "jquery.menu.js", css: "menu.css" },
tabs: { js: "jquery.tabs.js", css: "tabs.css", dependencies: ["panel", "linkbutton"] },
splitbutton: { js: "jquery.splitbutton.js", css: "splitbutton.css", dependencies: ["linkbutton", "menu"] },
menubutton: { js: "jquery.menubutton.js", css: "menubutton.css", dependencies: ["linkbutton", "menu"] },
accordion: { js: "jquery.accordion.js", css: "accordion.css", dependencies: ["panel"] },
calendar: { js: "jquery.calendar.js", css: "calendar.css" },
combo: {
js: "jquery.combo.js", css: "combo.css",
dependencies: ["panel", "validatebox"]
},
combobox: { js: "jquery.combobox.js", css: "combobox.css", dependencies: ["combo"] },
combotree: { js: "jquery.combotree.js", dependencies: ["combo", "tree"] },
combogrid: { js: "jquery.combogrid.js", dependencies: ["combo", "datagrid"] },
validatebox: { js: "jquery.validatebox.js", css: "validatebox.css" },
numberbox: { js: "jquery.numberbox.js", dependencies: ["validatebox"] },
searchbox: { js: "jquery.searchbox.js", css: "searchbox.css", dependencies: ["menubutton"] },
spinner: { js: "jquery.spinner.js", css: "spinner.css", dependencies: ["validatebox"] },
numberspinner: { js: "jquery.numberspinner.js", dependencies: ["spinner", "numberbox"] },
timespinner: { js: "jquery.timespinner.js", dependencies: ["spinner"] },
tree: {
js: "jquery.tree.js", css: "tree.css",
dependencies: ["draggable", "droppable"]
},
datebox: {
js: "jquery.datebox.js", css: "datebox.css",
dependencies: ["calendar", "combo"]
},
datetimebox: {
js: "jquery.datetimebox.js",
dependencies: ["datebox", "timespinner"]
},
slider: {
js: "jquery.slider.js",
dependencies: ["draggable"]
},
parser: { js: "jquery.parser.js" }
};
////预定义区域 //将国际化文件放入一个locales对象中
var locales = {
"af": "easyui-lang-af.js",
"bg": "easyui-lang-bg.js",
"ca": "easyui-lang-ca.js",
"cs": "easyui-lang-cs.js",
"cz": "easyui-lang-cz.js",
"da": "easyui-lang-da.js",
"de": "easyui-lang-de.js",
"en": "easyui-lang-en.js",
"es": "easyui-lang-es.js",
"fr": "easyui-lang-fr.js",
"it": "easyui-lang-it.js",
"nl": "easyui-lang-nl.js",
"ptcallbackR": "easyui-lang-ptcallbackR.js",
"ru": "easyui-lang-ru.js",
"tr": "easyui-lang-tr.js",
"zh_CN": "easyui-lang-zh_CN.js",
"zh_TW": "easyui-lang-zh_TW.js"
}; //定义一个局部变量,做循环遍历时候,存放状态
var queues = {};
//加载js
function loadjs(module, callback) {
//标志变量,js是否加载并执行
var state = false;
var script = document.createElement("script");
script.type = "text/javascript";
script.language = "javascript";
script.src = module;
//onload是firefox 浏览器事件,onreadystatechange,是ie的,为了兼容,两个都写上,这样写会导致内存泄露
//script.readyState只是ie下有这个属性,如果这个值为undefined,说明是在firefox,就直接可以执行下面的代码了。反之为ie,需要对script.readyState
//状态具体值进行判别,loaded和complete状态表示,脚本加载了并执行了。
script.onload = script.onreadystatechange = function () {
if (!state && (!script.readyState || script.readyState == "loaded" || script.readyState == "complete")) {
state = true;
////释放内存,还会泄露
script.onload = script.onreadystatechange = null;
if (callback) {//加载后执行回调
callback.call(script);
}
}
};
//具体加载动作,上面的onload是注册事件,
document.getElementsByTagName("head")[0].appendChild(script);
};
//运行js ,看代码逻辑可知,运行js,只是在js执行后,将这个script删除而已,主要用来加载国际化文件
function runJs(module, callback) {
loadjs(module, function () {
document.getElementsByTagName("head")[0].removeChild(this);
if (callback) {
callback();
}
});
};
//加载css方法
function loadcss(module, callback) {
var link = document.createElement("link");
link.rel = "stylesheet";
link.type = "text/css";
link.media = "screen";
link.href = module;
document.getElementsByTagName("head")[0].appendChild(link);
if (callback) {
callback.call(link);
}
};
//加载单一一个plugin,仔细研究module ,可以发现,pingin之间通过dependence,构造成了一颗依赖树,
//这个方法,就是加载具体树中的一个节点
function loadSinglejs(name, callback) {
//把整个plugin的状态设置为loading
queues[name] = "loading";
var module = modules[name];
//把js状态设置为loading
var jsStatus = "loading";
//如果允许css,并且plugin有css,则加载css,否则设置加载过了,其实是不加载
var state = (easyloader.css && module["css"]) ? "loading" : "loaded";
//加载css,plugin 的css,如果是全称,就用全称,否则把简写换成全称,所以简写的css文件要放入到themes/type./文件下
if (easyloader.css && module["css"]) {
if (/^http/i.test(module["css"])) {
var url = module["css"];
} else {
var url = easyloader.base + "themes/" + easyloader.theme + "/" + module["css"];
}
loadcss(url, function () {
state = "loaded";
//js, css加载完,才调用回调
if (jsStatus == "loaded" && state == "loaded") {
finish();
}
});
}
//加载js,全称用全称,简写补全。
if (/^http/i.test(module["js"])) {
var url = module["js"];
} else {
var url = easyloader.base + "plugins/" + module["js"];
}
loadjs(url, function () {
jsStatus = "loaded";
if (jsStatus == "loaded" && state == "loaded") {
finish();
}
});
//加载完调用的方法,改plugin状态
function finish() {
queues[name] = "loaded";
//调用正在加载的方法,其实已经加载完了
easyloader.onProgress(name);
if (callback) {
callback();
}
};
};
////加载主模块入口,
function loadModule(module, callback) {
//定义数组,最后是形成的是依赖插件列表,最独立的插件放在首位,name是末尾
var mm = [];
var doLoad = false;
//name有两种,一种是string ,一种是string array,这样一次可以加载多个plugin,都是调用add方法进行添加
if (typeof module == "string") {
add(module);
} else {
for (var i = 0; i < module.length; i++) {
add(module[i]);
}
}
function add(moduleN) {
//如果modules中没有这个plugin那退出
if (!modules[moduleN]) {
return;
}
//如果有,查看它是否依赖其他plugin
var d = modules[moduleN]["dependencies"];
//如果依赖,就加载依赖的plugin.同时在加载依赖的plugin的依赖。注意循环中调用了add,是递归
if (d) {
for (var i = 0; i < d.length; i++) {
add(d[i]);
}
}
mm.push(moduleN);
}; function finish() {
if (callback) {
callback();
}
//调用onLoad,传递name 为参数
easyloader.onLoad(options);
};
//形成依赖树,不行还没有做实质性工作呢,那就是加载。打起精神来,最核心的代码就是以下的了
//超时用
var time = 0;
//定义一个加载方法,定义后直接调用
function loadMm() {
//如果mm有长度,长度!=0,加载plugin,为0,即加载完毕,开始加载国际化文件。
if (mm.length) {
var m = mm[0];
if (!queues[m]) {//状态序列中没有这个plugin的信息,说明没有加载这个plug,调用laodSingle进行加载 s
doLoad = true;
loadSinglejs(m, function () {
mm.shift();//加载完成后,将这个元素从数组去除,在继续加载,直到数组
loadMm();
});
} else {
if (queues[m] == "loaded") {//如果这个plugin已经加载,就不用加载,以为mm中可能有重复项
mm.shift();
loadMm();
} else {
//超时时候,10秒钟调用一次loadMn().注意arguments.callee代表函数本身
if (time < easyloader.timeout) {
time += 10;
setTimeout(arguments.callee, 10);
}
}
}
} else {
if (easyloader.locale && doLoad == true && locales[easyloader.locale]) {
var url = easyloader.base + "locale/" + locales[easyloader.locale];
runJs(url, function () {
finish();
});
} else {
finish();
}
}
};
loadMm();
};
// 定义一个加载器,注意,是全局变量,没有var,
easyloader = {
modules: modules,//预定义模块
locales: locales,//预定义区域
base: ".",//easyui 基础目录,必须用'/'结束
theme: "default",//主题的名称预定义在themes目录下
css: true,//定义在加载模块的时候加载 CSS 文件
locale: null,//区域名称
timeout: 2000,//超时的值以毫秒为单位,载入如果超时则重载
//加载指定模块。当加载成功的回调函数被调用。
//模块参数有效的类型包括:
//● 一个单一的模块名称
//● 模块数组
//● ".css"后缀结尾的CSS文件
//● ".js"后缀结尾的JS文件
load: function (module, callback) { if (/\.css$/i.test(module)) {
if (/^http/i.test(module)) {
loadcss(module, callback);
} else {
loadcss(easyloader.base + module, callback);
}
} else {
if (/\.js$/i.test(module)) {
if (/^http/i.test(module)) {
loadjs(module, callback);
} else {
loadjs(easyloader.base + module, callback);
}
} else {
loadModule(module, callback);
}
}
},
//当一个模块加载成功的时候触发
onProgress: function (name) {
},
//当一个模块以及他的依赖加载成功的时候触发
onLoad: function (name) {
}
};
//以上一直在定义函数,和变量,此处为真正执行处
//获取页面的所有的script,主要是为了获取我们现在解释的easyloader.js文件路径,来设置base属性
var init = document.getElementsByTagName("script"); for (var i = 0; i < init.length; i++) {
var src = init[i].src;
if (!src) {
continue;
}
var m = src.match(/easyloader\.js(\W|$)/i);
if (m) {
//如果有,base为easyloadr.js 的相同前缀
easyloader.base = src.substring(0, m.index);//http://localhost:28046/jquery-easyui-1.3.2/plugins2/ }
}
//定义一个简化调用接口
window.using = easyloader.load;
if (window.jQuery) {
jQuery(function () {
//系统数据加载完后,加载parser.js插件,该插件是渲染界面的
easyloader.load("parser", function () {
jQuery.parser.parse();
});
});
}
})();

示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic EasyLoader - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script> <script src="../../plugins2/easyloader.js"></script>
</head>
<body>
<h2>Basic EasyLoader</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>Click the buttons below to load components dynamically.</div>
</div>
<div style="margin:10px 0;">
<a href="#" class="easyui-linkbutton" onclick="load1()">Load Calendar</a>
<a href="#" class="easyui-linkbutton" onclick="load2()">Load Dialog</a>
<a href="#" class="easyui-linkbutton" onclick="load3()">Load DataGrid</a>
</div>
<div id="cc"></div>
<div id="dd"></div>
<table id="tt"></table>
<script type="text/javascript" src="../../easyloader.js"></script>
<script>
function load1(){
using('calendar', function(){
$('#cc').calendar({
width:180,
height:180
});
});
}
function load2(){
using(['dialog','messager'], function(){
$('#dd').dialog({
title:'Dialog',
width:300,
height:200
});
$.messager.show({
title:'info',
msg:'dialog created'
});
});
}
function load3(){
using('datagrid', function(){
$('#tt').datagrid({
title:'DataGrid',
width:300,
height:200,
fitColumns:true,
columns:[[
{field:'productid',title:'Product ID',width:100},
{field:'productname',title:'Product Name',width:200}
]],
data: [
{"productid":"FI-SW-01","productname":"Koi"},
{"productid":"K9-DL-01","productname":"Dalmation"},
{"productid":"RP-SN-01","productname":"Rattlesnake"},
{"productid":"RP-LI-02","productname":"Iguana"},
{"productid":"FL-DSH-01","productname":"Manx"},
{"productid":"FL-DLH-02","productname":"Persian"},
{"productid":"AV-CB-01","productname":"Amazon Parrot"}
]
});
});
}
</script> </body>
</html>

插件效果

easyui源码翻译1.32--EasyLoader(简单加载)的更多相关文章

  1. easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler

    [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler 目录 [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampl ...

  3. [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader

    [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 目录 [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 0x00 摘要 0x01 ...

  4. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  5. easyui源码翻译1.32--panel(面板)

    前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系  比如datagrid 的渲染需要panel.resizable.linkbutton.pagination   今 ...

  6. easyui源码翻译1.32--PropertyGrid(属性表格)

    前言 继承自$.fn.datagrid.defaults.使用$.fn.propertygrid.defaults重写默认值对象.下载该插件翻译源码 属性表格提供The propertygrid pr ...

  7. easyui源码翻译1.32--Draggable(拖动)

    前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...

  8. easyui源码翻译1.32--Droppable(放置)

    前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...

  9. easyui源码翻译1.32--Resizable(调整大小)

    前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...

随机推荐

  1. MVC下设置默认页为index.html

    将RouteConfig代码修改为如下 public class RouteConfig { public static void RegisterRoutes(RouteCollection rou ...

  2. Fragment的数据传递

    开发之中用到的Fragment的次数越来越多,很多小的项目都已经直接在使用Fragment作为Activity的载体来切换页面.而在开发之中页面的切换我们最关心的问题就是数据的传递了.今天我们主要来研 ...

  3. MFC程序实现窗口分割,视图快捷插入控件和插入列表

    将视图中插入列表: 1.创建一个MFC应用程序,在MFC Wizard中,生成的类选项,如图 2.选择CListView作为基类 3.在CXXView.cpp(XX为你的程序名)重写虚函数OnInit ...

  4. ubuntu系统安装flashplayer

    打开浏览器,输入adobe flashplayer 进入官方网站,下载Linux 32-bit, 简体中文, Firefox,下载.tar.gz包. 然后点击立即下载.下载之后找到解压该文件夹,找到 ...

  5. Mysql 中 like 查询存在反斜杠的解决办法

    如 要查询   %\ABC\% 应该这样写, 写成四个反斜杠 like '%\\\\ABC\\\\%'

  6. Python的对象操作(一)

    python支持对象和函数   1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模 ...

  7. 用pelican搭建完美博客

    前面有文章介绍本站采用了Python编写的Pelican静态生成博客系统, 之所以没有使用当前很火的Jekyll, 是因为它是Ruby编写, 而我又对Ruby没有啥兴趣, 所以还是选择了使用了我熟悉的 ...

  8. 06_XML的写入_dom4j添加、删除、修改Xml文件内容

    [工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...

  9. GNU glibc

    在线G-lib-c(GNU C Library库)网站 参考: 1.bitsToTypes

  10. C++ GUI Programming with Qt4 笔记 -- chap2 QDialog

    以 finddialog 为例,介绍 QDialog.并对 Qt 的基本概念和技巧做了更进一步(chap1)的介绍. 1.MOC 扩展与signals–slots 机制 严格来说,Qt 开发,写的并不 ...