網(wǎng)(LieHuo.Net)教程 我的JSKit 蠻早就開始寫了 一直都不滿意 也沒(méi)怎么用得上。在此其間 下載了眾多的框架 看他們的架構(gòu)、設(shè)計(jì) 也沒(méi)有找到令自己滿意的版本 最終還是不斷的改進(jìn) 其實(shí)就是一直在減少核心的代碼 到最終我比較滿意的版本 結(jié)果只封裝了兩個(gè)公共方法 一個(gè)是Import(載入代碼) 另一個(gè)是Run(執(zhí)行代碼)。
為什么網(wǎng)上那么多優(yōu)秀的 功能強(qiáng)大的框架我都不滿意?因?yàn)?我對(duì)框架的需求其實(shí)非常的簡(jiǎn)單 我只需要它可以管理組織好我的代碼就OK了 我不需要在實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功能時(shí) 載入一堆在我實(shí)現(xiàn)某功能過(guò)程中 根本用不到的代碼 我很討厭這種浪費(fèi) 所以尋覓了很久 都沒(méi)找到很中意的東西。
作為一名入門沒(méi)多久的程序,一直追求簡(jiǎn)單的邏輯代碼,所以對(duì)于一些浪費(fèi)是很看不慣的,對(duì)于一些復(fù)雜的邏輯 看了半天也看不懂,最后都是手寫了事。回顧這些年的編碼之路,可悲的發(fā)現(xiàn),這輩子只能處于入門級(jí)別了,達(dá)不到更高的專家(師)級(jí)別了,因?yàn)閷W(xué)得太雜,精力被分散了。如果有來(lái)生,我想我會(huì)爭(zhēng)取一條道走到黑。
另外,再講兩句下面的這段代碼,因?yàn)榇a很少,所以也沒(méi)啥注釋可寫,只講一下思路吧。
Import方法:載入一個(gè)類,可以是一個(gè)很簡(jiǎn)單的類,也可以是一個(gè)框架。 我的組織管理代碼的想法主要是通過(guò)import方法實(shí)現(xiàn) 比如我在jskit中建了一個(gè) com.imcjj子文件夾,里面放了一個(gè)Browser.js 文件 就通過(guò) JK.Import("com.imcjj/Browser") 導(dǎo)入Browser.js文件的代碼 "JK"是JSKit的一個(gè)實(shí)例
以下為引用的內(nèi)容: /** * CJJ's JavaScript Kit * * @type : class * @version : v1.0 build 20090826 * @memo : none * ----------------------------------- * Copyright (c) cjj rusty_sun[AT]hotmail.com */ function JSKit(path){ if(!path){return null}; /*private member variable*/ var _runTimer=null, _importManage=[], _path=path; /*public method*/ JSKit.prototype.Import=function(file){ var script; var jskit=this; if(!_importManage[file]){_importManage[file]="loading"}; if(_importManage[file]!="loaded"){ script=document.createElement("script"); script.src =_path+file+".js"; script.onreadystatechange=function(){ if(this.readyState=='complete'){ var lastClass=file.substring(file.lastIndexOf("/")+1,file.length); if(lastClass=="Import"||lastClass=="Run"){return}; jskit[lastClass]=eval(lastClass); _importManage[file]="loaded"; script.onreadystatechange=null; return } }; script.onload=function(){ var lastClass=file.substring(file.lastIndexOf("/")+1,file.length); if(lastClass=="Import"||lastClass=="Run"){return}; jskit[lastClass]=eval(lastClass); _importManage[file]="loaded"; script.onload=null; }; document.getElementsByTagName("head")[0].appendChild(script); } };/*end of Import*/ JSKit.prototype.Run=function(code){ var loaded=true; var jskit=this; for(importFile in _importManage){ if(_importManage[importFile]=="loading"){loaded=false;break} }; if(!loaded){_runTimer=setTimeout(function(){jskit.Run(code)},500); return}; if(_runTimer){clearTimeout(_runTimer)}; if(typeof(code)=="function"){code()} };/*end of "Run"*/ } |
調(diào)用演示:
以下為引用的內(nèi)容: var JK=new JSKit("/jskit/jskit.src/"); if(JK){ JK.Import("com.imcjj/FormValidate"); JK.Import("com.imcjj/Browser"); JK.Run(function(){ var browser=new JK.Browser(); alert(browser.name+""+browser.agent); var oFormValidate=new JK["FormValidate"]("frmDemo"); var oObj=oFormValidate._form; if(!oObj){alert("未發(fā)現(xiàn)表單,無(wú)法進(jìn)行表單驗(yàn)證");document.close();} var oTip=new Tip(); oTip._struct="<strong>{#text#}</strong>"; oTip._inertDirection=0; oTip.add("tip_Name", "tip_bottom", "自定義提示消息", oObj.elements["Name"].parentNode,"SPAN", "<strong>{#text#}</strong>"); //添加外部驗(yàn)證函數(shù) //oFormValidate.addValidate("isDate",fnCheckDate,"f","日期是否正確?"); //參數(shù):驗(yàn)證方法,需要驗(yàn)證的表單元素的ID屬性 加*號(hào)表示該項(xiàng)為必填項(xiàng) oFormValidate.addRule("isNotNull","*Card"); //oFormValidate.addRule("isDate","*Birthday"); //調(diào)用自定義驗(yàn)證規(guī)則 //AJAX驗(yàn)證最后一個(gè)是AJAX驗(yàn)證函數(shù)參數(shù)列表:'getName.asp oFormValidate.addRule("isExists","Name",["'getName.asp'"], oTip); oFormValidate.addRule("isLen","*Password",[4,8]); oFormValidate.addRule("isSame","*Password1",["'password2'"]); oFormValidate.listen(); }); } |