在EasyJS中,可以通过类的名字动态加载一个class,教程一中已经说明了命名的规则,这片文章主要介绍JsLibrary的用法以及如何配合使用继承机制。
在JsLibrary中,提供一下几个函数来完成对象类的管理
import (improtList, callback, onError)
申请加载一个或多个新的js类,类的命名和存放路径根据教程一的规则。callback为加载成功后的回调函数,onError为加载失败后的回调函数
例如:
JsLibrary.import(["com.fern.controller.LoginController", "com.fern.service.LoginService"], function() {
var ctl = JsLibrary.createClass("com.fern.controller.LoginController");
var service = JsLibrary.createClass(""com.fern.controller.LoginService");
service.login("user1", "password", function() {});
}, function(error) {
//show error
});
classForName(className)
根据class的名字,返回对应的类,比如
var controller = classForName("com.fern.controller.LoginController")
那么将返回com.fern.controller.LoginController的constructor,如果对于的类不存在,将返回null
register (className, clazz)
注册一个新类的类别
一般用法如下:
var newClass = function() {
.......................
}
JsLibrary.register("com.fern.service.UserService", newClass);
只有经过注册后的类,系统才能有效的识别。
createClass(className, arg1, arg2...)
因为JS毕竟不是一个完全的OOP语言,实现的方法是通过hack来变通实现的,因为我不建议使用 new Class()的方式来创建一个新的类,尤其是当一个类需要有构造参数的时候,必须通过变通的方法来实现,并且调用 JsLibrary.createClass来创建
变通的方法如下:
在你的class里面定义 _init方法,并加入参数。比如:
(function() {
var composit = function() {
var self = arguments[0] || this;
var _super = ExtendClass(this, JsLibrary.classForName(Const.BaseComponent), self);
var controller;
var view;
this.getController = function() {
return controller;
}
this.showError = function(code, result) {
controller.showError(code);
}
this.showIndicator = function(message) {
controller.showIndicator(message);
}
this.hideIndicator = function() {
controller.hideIndicator();
}
this._init = function(ctrl, v) {
controller = ctrl;
view = v;
}
};
JsLibrary.import([Const.BaseComponent], function() {
JsLibrary.register(Const.BaseComposit, composit);
});
})();
需要创建实例的时候,通过JsLibrary.createClass来实现
比如:
compositeTrading = JsLibrary.createClass(Const.TradeListComposit, self, self.getComponent("trading-list"));
compositeDeposit = JsLibrary.createClass(Const.DepositListComposit, self, self.getComponent("deposit-list"));
compositePayment = JsLibrary.createClass(Const.PaymentListComposit, self, self.getComponent("payment-list"));