ver : 0.0.7
author : Roy Zhang
desc :
详细的API : http://zhh77.github.io/smartjs/
介绍在我的博客中同步 http://www.cnblogs.com/zhh8077/
update :
ver 0.0.6 - 2015.1
-
提供node版本-smart.js, 安装命令npm install smart.js;
-
trigger加入extend方法;
ver 0.0.5 - 2014.11
-
提供独立运行版本,不依赖jquery;
-
注释基于新版smartdoc进行重构;
ver 0.0.4 - 2014.8.9
-
添加权重数组 - priorityList,优化aop;
-
新增filterBuilder模块,数组查询条件对象生成器,支持3中类型,字符查询串(如:name like @name and age > @maxAge),条件对象,过滤方法;
-
新增datamanager-table,实现初步crud控制
ver 0.0.3 - 2014.6.21
- 加入dataManager模块,包括dataManager,dataService和dataPolicyManager三个对象;
ver 0.0.2 - 2014.6.14
-
新增oop(klass,factory)模块;
-
promiseEvent加入非阻塞模式noBlock;
-
trigger加入属性监听
-
smartjs主模块优化,支持requirejs和seajs
-
单元测试页面优化
ver 0.0.1 - 2014.6.7
-
smartjs主模块
-
util 模块
-
aop模块(promiseEvent; trigger; flowContoller)
//合并默认数据方法,将obj中不空的内容从defObj中复制
st.mergeObj(deep, obj, defObj, exclude)
//在目标对象方法中注入方法,返回结果
st.injectFn(target, name, fn, before,stopOnFalse)
//合并方法,返回结果
st.mergeFn(fn, mergeFn,stopOnFalse)
基于事件和promise的回调管理,类似于jquery的callbacks,但具有结果传递,优先级,事件参数,promise控制等功能
var events = st.promiseEvent(mode);
events.add(name,function(e,arg,……){},priority,eventMode)
event.fire(arg);
mode :once和callback两种模式,(callback模式不会加入事件参数) name :加入的事件名称 priority :权重设置 eventMode :加入的事件模式;once
e.stopProgation() 阻止后续回调
e.result 上一个回调的结果 e.remove() 删除当前回调
e.promise() 返回契约
e.resolve() 解决契约
e.reject() 拒绝契约
触发器,在对象上应用触发器(aop)功能,目标对象会具有方法注入功能(基于promiseEvent),注入的类型有before,after和round环绕三种;
var obj = {
test : function(text){
alert(text);
}
};
//加入触发器
st.attachTrigger(obj);
//注入方法
obj.on("test","trigger",function(e,text){alert(text + " world")});
obj.test('hello');
结果hello, hello world
流程控制器,控制流程的执行和aop(基于Trigger)
var flow = {
init: function(e, name) {
setTimeout(function() {
alert('init');
e.resolve();
}, 100)
return e.promise();
},
render: function(e, name) {
alert('render');
},
complete: function(e, name) {
alert('complete');
}
};
st.flowController({
flow: flow,
order: ["init", "render", "complete"],
trigger: true
});
flow.boot();
结果init,render,complete
//加入触发器
flow.onBefore('init','preInit',function(e){
e.stop();
alert('preInit');
})
flow.boot();
结果preInit,render,complete