ESOE-IDE v0.3 技术说明书
Author: Feng WeiGuo (冯卫国)
Email: forxm@21cn.com
Web: http://www.supertree.org
Tel: 86-0755-81030955
All Rights Reserved
2008-9
目录
ESOE-IDE v0.3 技术说明书... 1
1. 设计目标/特性... 3
2.类模型... 3
2.1 类模型和类声明... 3
2.1 类的名称空间管理... 6
3.绑定... 6
3.1 从HTML绑定js类... 6
3.2 从js类绑定DOM元素... 6
4.资源... 7
5.DOM元素寻址... 7
6.事件映射... 8
7.ESOE-IDE加载过程... 9
8. 类文件管理/打包输出/库文件... 9
9.ESOE-IDE对实现DOM类的建议... 10
9.1. 全局Z-index分配... 10
9.2. 事件映射方法... 10
9.3. 控件设计... 10
9.4. 窗体设计... 11
9.5. 对话框设计... 11
附录A. ESOE-IDE工具函数... 13
name convention. 13
$esoe.$preload. 13
$esoe.$declare. 13
$esoe.$new.. 13
$esoe.$derive. 14
$esoe.$import 14
$esoe.$bind. 14
$esoe.$find. 14
$esoe.$init 15
$esoe.$apply. 15
$esoe.$. 15
$esoe.$$. 16
$esoe.$notify. 16
附录B. 资源定义格式... 17
主资源格式... 17
附加资源格式... 17
附录C. 事件映射格式... 18
1. 设计目标/特性
- 1. 由独立的js模块,和独立的html模块构造,减少传统Web设计时两者相互混合;
- 2. 与传统IDE类似,Js和html之间的联系,应是代码(js)和资源(html)之间的关系;
- 3. 伪编译:类库引用完整性检查/打包;
- 4. 制作库文件(Library)功能;
- 5. 事件à方法映射;
- 6. 提供窗口框架/对话框/控件的功能;
- 7. 提供类向导/映射向导等方便编辑;
- 8. 输出的文件的js/html代码压缩;
- 9. 类模型,基于早期版本的ESOE,提供类继承/名称空间等功能;
- 10. 项目文件保存配置;
- 11. 提供js/html语法着色编辑器;
- 12. 自生系统:IDE自身使用js/html编码,使用IDE编译器制作生成;
2.类模型
ESOE-IDE v0.3是从早期版本ESOE v0.2演变而成,去除自动加载/共享/析构等功能,加入重要的类声明概念。
2.1 类模型和类声明
ESOE-IDE使用以下类模型:
- 1.函数(Function)是类的构造函数,用于类实例的初始化;
- 2.每个函数(Function)带有一个声明函数,用于构造类的原型(prototype);
- 3.所有类在使用之前,必须声明,即调用声明函数。
以下给出实现以上类模型的实例,这些实例都可以兼容地应用到实际的编码中。
原始模型:
function MyClass(a,b) //构造函数
{
...
}
MyClass._declare= function() //声明函数
{
MyClass2._declare(); //声明使用的外部类
this.prototype={ //构造原型
p1: 123,
f1: function(c,d)
{
var e= new MyClass2; //使用外部类
}
}
this._declare=function(){} //清除声明函数
}
....
MyClass._declare(); //声明一个类
var o= new MyClass(1,2); //使用这个类
说明:
- 1. 声明函数不带参数,避免引起闭包问题;
- 2. 声明函数结束时清除声明函数,以允许多次声明;
- 3. 使用一个类之前,必须先声明;
- 4. 如果一个类使用了另一个外部类,在类的声明函数开始部分声明此外部类;
- 5. ESOE-IDE中,类的声明函数的默认名称是"_declare";
使用类声明有以下好处:
- 1. 使用大规模类库时,其中不被使用的类可以不用构造原型,加快系统加载,减少资源占用;
- 2. 在类的声明函数开始部分声明外部类,如果此外部类未被加载,可以在应用启动时立即抛出异常,将运行时错误转为设计时错误,利于修改;
混合模型:
function MyClass(a,b) //构造函数
{
}
MyClass._declare= function() //声明函数
{
...
}
$esoe.$preload( "com.MyName.MyClass", MyClass, MyClass._declare ); //载入ESOE名称空间
...
var cls= $esoe.$declare("com.MyName.MyClass"); //声明一个类
var o= new cls(1,2); //使用这个类
说明:
- 1. 使用$esoe.$preload()将类预载入ESOE名称空间,以利于管理;
- 2. 预载入$esoe.$preload()不会调用类的声明函数;
- 3. 使用$esoe.$declare ()声明类;
- 4. $esoe.$declare ()自动清除声明函数;
- 5. 混合模型可用于将已存在的代码快速改造为ESOE-IDE兼容的类;
IDE模型:
$esoe.$preload(
"com.MyName.MyClass", //指定ESOE名称空间
function(a,b) //构造函数
{
},
function() //声明函数
{
...
}