代码改变世界

kmdjs api reference

2014-09-21 09:23  【当耐特】  阅读(1420)  评论(2编辑  收藏  举报

总览

kmdjs的主要就两个API:kmdjs.config和define

kmdjs.config

kmdjs.config是用于项目整体配置,一般的配置如下所示:

kmdjs.config({
    name:"HelloKMD",
    baseUrl: "js",
    classes: [
        { name: "HelloKMD.Ball" },
        { name: "Util.Bom",url:"Util" }
    ]
});

其中:

name:项目的名称

baseUrl:基础的路径

classes: 项目中定义的所有的类,其中的name是命名空间+类名,url是该类对应的目录

项目目录结构如图所示:

dir

define

define可以传入两个参数,如:

define("namespace.class",{

})

也声明依赖,传入三个参数,如:

define("namespace0.class1",["namespace1,namespace2"],{

})
这里需要注意两点:
  • 依赖项列表是namespace,非class/module
  • 如果要使用namespace0下的class2无需在依赖列表中加入namespace0,因为class1本身就属于namespace0,namespace0下的任何class都可以随意使用

这里可能有童鞋会担心,kmdjs是否会预先加载namespace0所有的class。这点大可放心,kmdjs会使用uglify2去分析依赖,加载里面用到的class。

对应上面的kmdjs.config,相关js文件一定存在如下的class定义:

define("HelloKMD.Ball", {

})

define("Util.Bom", {

})
这里需要注意一点:
  • 如果不显示声明namespace,如下面代码所示:
define("Ball", {

})

那么它就默认处于:kmdjs.config中的name的命名空间下,即:HelloKMD.Ball

define高级之继承

父类:

define("Animal", {
    ctor: function (age) {
        this.age = age;
    }
})

子类:

define("Pig:Animal", {
    ctor: function (age, name) {
        this._super(age);
        this.name = name;
    },
    climbTree: function () {
        return "猪不能上树";
    }
})

可以通过ctor是构造函数,this._super访问父类的方法。在其他js里直接new就能创建对象实例。如,在Main中使用:

define("Main", {
    ctor: function () {
       var pig=new Pig(16,"巴西猪");
    }
})

当然,如果需要扩展一个类的静态方法或者属性,可以通过下面这种方式:

define("Base.Http", {
    statics: {
        version:"1.0.0",
        ajax:function(option){
         ...
        },
        jsonp:function(){
         ...
        }       
    }
})

在其他js里直接new就能创建对象实例。如,在Main中使用:

define("Main",["Base"], {
    ctor: function () {
       Http.ajax({
         ...
       })
    }
})

kmdjs.config高级之跨项目跨url依赖

kmdjs.config({
    name: "HelloKMD",
    baseUrl: "js",
    deps: [
        {
            url: "OtherTopNs.js",
            classes:[
                 { name: "OtherTopNs.Ball" },
                 { name: "OtherTopNs.XXX" }
             ]
        },
        {
            url: "http://htmlcssjs.duapp.com/Bom.js",
            classes: [
                   { name: "Util.Bom" }
            ]

        }
    ],
    classes: [
        { name: "HelloKMD.Animal" },
        { name: "HelloKMD.Pig" },
        { name: "HelloKMD.PigSub" }
    ]

});

这里需要build出OtherTopNs下面的某些class,且听下回分解..

详细代码见:https://github.com/kmdjs/kmdjs