您的位置:无忧脚本 » Brull与无忧同在 » 日志
bingo轻量级javascript框架,使用</script>标签同步加载js模块,别具一格
查看( 206 ) /
评论( 14 )
特点:
H9N2rU KK3W0(1)模块动态加载:利用</script>标签载入js文件,javascript:;" onClick="javascript:tagshow(event, 'javascript');" target="_self">javascript:;" onClick="javascript:tagshow(event, '%E4%AF%C0%C0%C6%F7');" target="_self">浏览器不会出现白屏、假死等现象,用户体验好。同时可以保证载入的Javascript代码先于当前代码执行,即执行上确保同步。无忧脚本#J&V8\R2TX^
(2)命名空间管理,当然有不可或缺的命名冲突管理,比如"a.class"和"b.class"冲突了,那么在用户程序里可以使用"a.class"来引用位于a包下的"class"类,同理b.class亦然。
Hg Wn2fL}R}0(3)采用类似java包的形式来管理Javascript模块,即一个包就是一个文件夹,文件名必须和类名相同。
M|6`)Qh M e0(4)框架代码很小,压缩后(仅仅代码混淆)只有3KByte!无忧脚本#P#or:d*E"?
(5)支持IE6、IE7、Firefox、Netscape、Mozilla、Safari,不支持opera
B7]E0^@?'d0使用bingo的js代码有两点要求:
)pg6tG et_0(1)使用匿名函数包含整个用户js代码,这个也是编写高质量javascript代码的做法之一。无忧脚本$VQ,TEX2[:^3e
(2)js文件名必须和js类名相同无忧脚本.q8T yr8O r$Z
(3)调用$import载入依赖的js类文件,比如$import("a.class"),意味着载入bingo所在目录下的a目录下的class.js文件。
+bW.@L p E\[0遵守以上三点,你将无须关注各js文件之间的依赖,把重点放在编写js代码上。更多信息请查看代码里的注释,或者我后来写的测试例子。
jb0M/o a5o$F0BTW,本人10几天前就有写js框架的打算,在winter发布他的xnamespace之后,我有了写bingo的灵感和实现原理。因此bingo的原理和xnamespace是一样的,但是里面的实现却完全的不一样了,而且bingo解决了xnamespace存在的问题(当时winter是写着玩的^_^)。同时在编码的过程中得到了winter和月影的帮助,在此一一表示感谢。
jPF^@ d0因时间不充分,没有做多少测试,有兴趣的朋友可以测试下。测试代码比较简陋,最近会抽时间写更详尽的测试例子,敬请关注,谢谢!
H9N2rU KK3W0(1)模块动态加载:利用</script>标签载入js文件,javascript:;" onClick="javascript:tagshow(event, 'javascript');" target="_self">javascript:;" onClick="javascript:tagshow(event, '%E4%AF%C0%C0%C6%F7');" target="_self">浏览器不会出现白屏、假死等现象,用户体验好。同时可以保证载入的Javascript代码先于当前代码执行,即执行上确保同步。无忧脚本#J&V8\R2TX^
(2)命名空间管理,当然有不可或缺的命名冲突管理,比如"a.class"和"b.class"冲突了,那么在用户程序里可以使用"a.class"来引用位于a包下的"class"类,同理b.class亦然。
Hg Wn2fL}R}0(3)采用类似java包的形式来管理Javascript模块,即一个包就是一个文件夹,文件名必须和类名相同。
M|6`)Qh M e0(4)框架代码很小,压缩后(仅仅代码混淆)只有3KByte!无忧脚本#P#or:d*E"?
(5)支持IE6、IE7、Firefox、Netscape、Mozilla、Safari,不支持opera
B7]E0^@?'d0使用bingo的js代码有两点要求:
)pg6tG et_0(1)使用匿名函数包含整个用户js代码,这个也是编写高质量javascript代码的做法之一。无忧脚本$VQ,TEX2[:^3e
(2)js文件名必须和js类名相同无忧脚本.q8T yr8O r$Z
(3)调用$import载入依赖的js类文件,比如$import("a.class"),意味着载入bingo所在目录下的a目录下的class.js文件。
+bW.@L p E\[0遵守以上三点,你将无须关注各js文件之间的依赖,把重点放在编写js代码上。更多信息请查看代码里的注释,或者我后来写的测试例子。
jb0M/o a5o$F0BTW,本人10几天前就有写js框架的打算,在winter发布他的xnamespace之后,我有了写bingo的灵感和实现原理。因此bingo的原理和xnamespace是一样的,但是里面的实现却完全的不一样了,而且bingo解决了xnamespace存在的问题(当时winter是写着玩的^_^)。同时在编码的过程中得到了winter和月影的帮助,在此一一表示感谢。
jPF^@ d0因时间不充分,没有做多少测试,有兴趣的朋友可以测试下。测试代码比较简陋,最近会抽时间写更详尽的测试例子,敬请关注,谢谢!
CODE:
/*---------------------------------------------------------------------------*\
#q
Fga
IT`Z.~?0| JavaScript. Framework
C5Q'OH
P[Q;R0| Author : brull无忧脚本/yKK.^5i-R
| Date: 2007-12-5无忧脚本g4sF:}"B0WU
| Version: 0.1
gYb;h+X*G)@#`0| Copyright (c) 2007 builded by brull(QQ:275476100)无忧脚本{7o%s1wl^tg/W
\*---------------------------------------------------------------------------*/
Q4H!aI$c.D0无忧脚本K&@s3f&{'XC}
/**
^1f5Et V+?
}/N+jS0* @fileoverview无忧脚本rU&w'X(_F
* bingo,一个超轻量级的Javascript框架,主要用于js模块的载入和管理。特点:
,\},Mk@4B0* <pre>
e)C+XH*x0* (1)采用类似java包的形式来管理Javascript模块;无忧脚本:Z*D!m0R+a!F"q$` a
* (2)模块动态加载:利用</script>标签载入js文件,同时可以保证载入的Javascript代码先于当前代码执行,即执行上确保同步。
ri3J(gc"~%Gs0* (3)命名空间管理;
q1Sys9Uh0* 使用bingo的js代码有两点要求:
9X
QC-L pY0i!l0* (1)使用匿名函数包含整个js代码无忧脚本"id(w"~&eZ.dl
* (2)js文件名必须和js类名相同,否则在命名冲突时无法处理无忧脚本6l
`0S q&y!fP7`
* </pre>无忧脚本{F5g%@ g9A
*/
*u\0Tj/dN%F MP8c0
A9zeQ
G\w:A0/**
QwFXZ)~` GPM0 * @param {boolean} debug true 意味着当前模式为调试模式,如果程序捕捉到错误,将会alert错误,反之,不会。默认为true
%M1Op9s;@#Z/tqgs&z0 */无忧脚本%c.uo![9g*A
(function(debug){
qME1A*`n#xC0 if(typeof window.bingo != "undefined") return;//防止多次加载无忧脚本(`icv['?k4UTprm5e
无忧脚本\2S7x%Z?wn
//全局变量无忧脚本,t$_%K v_
var libQueue = [];//待加载外部库队列无忧脚本g!clG+itPk LG
var namespaceList = [];//命名空间列表,结构{name : "namespace",state : "loading|loaded"}
N.P2W!X4T3g9m$~ d1q0 var fileList = [];//待加载文件列表无忧脚本dg!H MXc\+O0U5^
var isAllLoaded = false;//是否所有文件都已加载完成无忧脚本aA#k"k/Z'Z0Z
var error = [
wDq9C y@8M9F0 new Error("<bingo: js file is not loaded>"),
.JiF.S@FTO1te0 new Error("<bingo: waiting for all js files to be loaded>"),无忧脚本%jL @|KC
new Error("bingo: $import's caller is not a function"),
"`#M^5W,Oo0 new Error("bingo: bingo can not work on your browser,please change another one"),
z!J2`T,yy\0 new Error("bingo: the giving namespace is empty")无忧脚本5F.mH`t/m h;Rm/F%n0C
];无忧脚本+P3Qh"al&f-lB
无忧脚本x)r r NB9m%tk5[
var agent = window.navigator.userAgent.toLowerCase();
+KR3^
Q*p7c-B@0IN0 var script. = document.getElementsByTagName("SCRIPT");
#k3cK7jfv5~4[|0 var curFilePath = script[script.length-1].src;//bingo当前路径
9r
ZI`~,\[+D6UB1U,to0 var bingo = {无忧脚本7]{v*P+h
version : "0.1",
HB5I8W5A0 browser : {无忧脚本B hw
?xp7sj
version : (agent.match(/.+(?:pe6?|or|ox|it|ra|ie|rv)[\/: ]([\d.]+)/) || [])[1],
!t&L