程序员人生 网站导航

叹一下我的 jskit 的核心代码

栏目:jscript时间:2014-01-19 16:30:44

  网(LieHuo.Net)教程 我的JSKit 蛮早就开始写了 一直都不满意 也没怎么用得上。在此其间 下载了众多的框架 看他们的架构、设计 也没有找到令自己满意的版本 最终还是不断的改进 其实就是一直在减少核心的代码 到最终我比较满意的版本 结果只封装了两个公共方法 一个是Import(载入代码) 另一个是Run(执行代码)。

  为什么网上那么多优秀的 功能强大的框架我都不满意?因为 我对框架的需求其实非常的简单 我只需要它可以管理组织好我的代码就OK了 我不需要在实现一个简单的功能时 载入一堆在我实现某功能过程中 根本用不到的代码 我很讨厌这种浪费 所以寻觅了很久 都没找到很中意的东西。

  作为一名入门没多久的程序,一直追求简单的逻辑代码,所以对于一些浪费是很看不惯的,对于一些复杂的逻辑 看了半天也看不懂,最后都是手写了事。回顾这些年的编码之路,可悲的发现,这辈子只能处于入门级别了,达不到更高的专家(师)级别了,因为学得太杂,精力被分散了。如果有来生,我想我会争取一条道走到黑。

  另外,再讲两句下面的这段代码,因为代码很少,所以也没啥注释可写,只讲一下思路吧。

  Import方法:载入一个类,可以是一个很简单的类,也可以是一个框架。 我的组织管理代码的想法主要是通过import方法实现 比如我在jskit中建了一个 com.imcjj子文件夹,里面放了一个Browser.js 文件 就通过 JK.Import("com.imcjj/Browser") 导入Browser.js文件的代码 "JK"是JSKit的一个实例

以下为引用的内容:
/**
* 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"*/
}

  调用演示:

以下为引用的内容:
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("未发现表单,无法进行表单验证");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>");
        //添加外部验证函数
        //oFormValidate.addValidate("isDate",fnCheckDate,"f","日期是否正确?");
        //参数:验证方法,需要验证的表单元素的ID属性 加*号表示该项为必填项
        oFormValidate.addRule("isNotNull","*Card");
        //oFormValidate.addRule("isDate","*Birthday");
        //调用自定义验证规则
        //AJAX验证最后一个是AJAX验证函数参数列表:'getName.asp
        oFormValidate.addRule("isExists","Name",["'getName.asp'"], oTip);
        oFormValidate.addRule("isLen","*Password",[4,8]);
        oFormValidate.addRule("isSame","*Password1",["'password2'"]);
        oFormValidate.listen();
    });
}

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐