smartJS 0.1 API 讲解 - PromiseEvent
上篇简单的介绍smartjs了一些通用方法的api。这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上)
PromiseEvent
基于事件和promise的回调管理,类似于jquery的callbacks,但具有结果传递,优先级,事件参数,promise控制等功能
接口方法
var events = st.promiseEvent(mode);
events.add(name,function(e,arg,……){
},priority,eventMode)
event.fire(arg,...);
参数说明
mode :once和callback两种模式,(callback模式不会加入事件参数)
e.stopProgation() 阻止后续回调
event.add(name,fn,priority,eventMode) 添加事件回调, name :加入的事件回调名称; priority :权重设置 ;eventMode :加入的事件模式;once;
event.fire(arg,,,,) 执行事件回调
event.fireWith(context,[args]) 使用上下文回调
event.has(name) 根据回调名称判断是否已注册回调
event.remove(name) 根据名称删除回调
event.clear() 清除所有回调
e事件参数
e.result 上一个回调的结果
e.remove() 删除当前回调
e.promise() 返回契约
e.resolve() 解决契约
e.reject() 拒绝契约
使用样例
普通方式
var calls = st.promiseEvent(),
result = []; //测试使用once模式,执行一次既销毁
calls.add('call1', function(e, text) {
result.push(text+'1');
},"once") calls.add('call2', function(e, text) {
//效果同“once”
e.remove()
result.push(text+'2');
}) //执行,结果 [call1,call2]
calls.fire('call');
权重,默认权重为0,可以通过st.conf({defPriority:100})来设置,相同权重先入先出
result = [];
//权重
calls.add('p', function(e, text) {
result.push('def');
}) calls.add('p10', function(e, text) {
result.push(10);
},10) calls.add('p50', function(e, text) {
result.push(50);
},50) calls.add('pDef', function(e, text) {
result.push('def2');
}) //执行,结果 [50,10,def,def2]
calls.fire();
stopProgation,停止后续回调
//stopProgation,停止后续回调
calls.add('stop',function(e){
e.stopPropagation();
result.push("stop");
},20) //执行,结果 [50,stop]
calls.fire();
结果传递,promiseEvent回将return的结果或者resolve的非undefined的结果记录下来并向下传递;
//result传递模式
calls.add('c1', function(e, text) {
return text + "-c1";
}) calls.add('c2', function(e, text) {
return e.result + "-c2";
}) calls.add('c3', function(e, text) {
return e.result + "-c3";
}) //执行,结果 test-c1-c2-c3
calls.fire('test');
Prmose模式,
可以与jquery的promise结合使用
$.when(calls.fire()).done(function(result){
})
//清除回调
calls.clear();
result = []; //promise模式
calls.add("c1", function(e) {
setTimeout(function() {
result.push("c1");
e.resolve();
}, 100);
return e.promise();
}); calls.add("c2", function(e) {
result.push("c2");
}); //执行,结果 [c1,c2]
calls.fire();
mode设置,once(执行及销毁)和callback(简单回调)
//callback模式 & once模式
var calls2 = st.promiseEvent("callback once"); //callback不存在e事件参数,只是具有见的回调管理
calls2.add('c1', function(text) {
return text + "-c1";
}) //执行第一次,结果 test-c1
calls2.fire('test'); //执行第二次,因为once模式,结果 undefined
calls2.fire('test');
更多的例子请参考smartjs上的测试用例
smartJS 0.1 API 讲解 - PromiseEvent的更多相关文章
- smartJS 0.1 API 讲解 - FlowController
本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...
- smartJS 0.1 API 讲解 - Trigger
上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...
- smartjs 0.2 OOP讲解 - Klass 类继承
SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...
- smartjs 0.2 OOP讲解 - factory
本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...
- 【jquery】 API讲解 内部培训资料
资料在百度云盘 一.jquery API讲解 1.jquery api如何使用 jquery api http://www.hemin.cn/jq/ 2.常用api讲解 选择器: 通过$()获取 ...
- AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼ AFNetworking 2.0 相比1.0 API ...
- Spark 下操作 HBase(1.0.0 新 API)
hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...
- ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...
- Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Zepto 1.0 中文手册,Zepto 1.0 API-translate by yaotaiyang
Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Z ...
随机推荐
- Lina Group
var query = from ll in proListRequestList group ll by new {ll.pro_id} into g select new ProListReque ...
- 一个.net Cookie组件的bug引发的题外话
在.net里,做过Http模拟发送请求的朋友们应该遇到过,有个时候无论怎么努力,都没办法让Cookie跟网页用浏览器所收集的一样,其中原因除了有些Cookie大概是ReadOnly之外,似乎另有隐情: ...
- iOS真机调试 for Xcode 5
由于Xcode5的到来,关于iOS软件进行真机调试方面,有了一些变化,苹果在Xcode 5中修改了一些规则,一方面是阻止以往破解的方式进行调试(免证书).另一方面是添加了自动生成证书的功能特性,来加快 ...
- 算法笔记_164:算法提高 最小方差生成树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V, ...
- linux route命令使用
说明:route命令是打印和操作ip路由表描述:route操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主 机或者一个网络通过一个网络接口,如eth0.当使用"add&qu ...
- fastdfs安装
1:安装libevent rpm -aq |grep libevent|xargs rpm -e --nodeps tar zxvf libevent-2.0.21-stable.ta ...
- 老生常谈:DEDECMS安全设置问题分享
Dedecms安全问题已经是老生常谈了.虽然无忧主机php虚拟主机安全性是很高的,但是黑客总是利用dedecms的漏洞进行注入.其实有些时候,是我们对dedecms的安全设置不到位导致的.今天无忧主机 ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- IIS6.0应用程序池回收(转载)
这段时间公司的程序经常出现问题,然后整个应用程序就不能访问了,我们的服务器版本:window 2003 SP1,IIS6.0,没有安装Microsoft Visual Studio .NET . 问题 ...
- SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled)
SElinux共有3中状态.1.selinux的配置文件:/etc/selinux/config# This file controls the state of SELinux on the sys ...