上篇简单的介绍smartjs了一些通用方法的api。这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上)

PromiseEvent

基于事件和promise的回调管理,类似于jquery的callbacks,但具有结果传递,优先级,事件参数,promise控制等功能

接口方法

  1. var events = st.promiseEvent(mode);
  2.  
  3. events.add(name,function(e,arg,……){
  4.  
  5. },priority,eventMode)
  6.  
  7. 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() 拒绝契约

使用样例

普通方式

  1. var calls = st.promiseEvent(),
  2. result = [];
  3.  
  4. //测试使用once模式,执行一次既销毁
  5. calls.add('call1', function(e, text) {
  6. result.push(text+'1');
  7. },"once")
  8.  
  9. calls.add('call2', function(e, text) {
  10. //效果同“once”
  11. e.remove()
  12. result.push(text+'2');
  13. })
  14.  
  15. //执行,结果 [call1,call2]
  16. calls.fire('call');

权重,默认权重为0,可以通过st.conf({defPriority:100})来设置,相同权重先入先出

  1. result = [];
  2. //权重
  3. calls.add('p', function(e, text) {
  4. result.push('def');
  5. })
  6.  
  7. calls.add('p10', function(e, text) {
  8. result.push(10);
  9. },10)
  10.  
  11. calls.add('p50', function(e, text) {
  12. result.push(50);
  13. },50)
  14.  
  15. calls.add('pDef', function(e, text) {
  16. result.push('def2');
  17. })
  18.  
  19. //执行,结果 [50,10,def,def2]
  20. calls.fire();

stopProgation,停止后续回调

  1. //stopProgation,停止后续回调
  2. calls.add('stop',function(e){
  3. e.stopPropagation();
  4. result.push("stop");
  5. },20)
  6.  
  7. //执行,结果 [50,stop]
  8. calls.fire();

结果传递,promiseEvent回将return的结果或者resolve的非undefined的结果记录下来并向下传递;

  1. //result传递模式
  2. calls.add('c1', function(e, text) {
  3. return text + "-c1";
  4. })
  5.  
  6. calls.add('c2', function(e, text) {
  7. return e.result + "-c2";
  8. })
  9.  
  10. calls.add('c3', function(e, text) {
  11. return e.result + "-c3";
  12. })
  13.  
  14. //执行,结果 test-c1-c2-c3
  15. calls.fire('test');

Prmose模式,

可以与jquery的promise结合使用

$.when(calls.fire()).done(function(result){

})

  1. //清除回调
  2. calls.clear();
  3. result = [];
  4.  
  5. //promise模式
  6. calls.add("c1", function(e) {
  7. setTimeout(function() {
  8. result.push("c1");
  9. e.resolve();
  10. }, 100);
  11. return e.promise();
  12. });
  13.  
  14. calls.add("c2", function(e) {
  15. result.push("c2");
  16. });
  17.  
  18. //执行,结果 [c1,c2]
  19. calls.fire();

mode设置,once(执行及销毁)和callback(简单回调)

  1. //callback模式 & once模式
  2. var calls2 = st.promiseEvent("callback once");
  3.  
  4. //callback不存在e事件参数,只是具有见的回调管理
  5. calls2.add('c1', function(text) {
  6. return text + "-c1";
  7. })
  8.  
  9. //执行第一次,结果 test-c1
  10. calls2.fire('test');
  11.  
  12. //执行第二次,因为once模式,结果 undefined
  13. calls2.fire('test');

更多的例子请参考smartjs上的测试用例

  

  

smartJS 0.1 API 讲解 - PromiseEvent的更多相关文章

  1. smartJS 0.1 API 讲解 - FlowController

    本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...

  2. smartJS 0.1 API 讲解 - Trigger

    上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...

  3. smartjs 0.2 OOP讲解 - Klass 类继承

    SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...

  4. smartjs 0.2 OOP讲解 - factory

    本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...

  5. 【jquery】 API讲解 内部培训资料

    资料在百度云盘 一.jquery  API讲解 1.jquery  api如何使用 jquery  api http://www.hemin.cn/jq/ 2.常用api讲解 选择器: 通过$()获取 ...

  6. AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API ...

  7. Spark 下操作 HBase(1.0.0 新 API)

    hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. JavaScript中让元素动态发射指定的事件

    var ev = document.createEvent('HTMLEvents'); //动态创建HTML事件 ev.initEvent('abort', false, true); //HTML ...

  2. Vue 作用域插槽

    使用场景:复用子组件的slot,又可以使slot的内容不一样. <!DOCTYPE html> <html lang="zh"> <head> ...

  3. JavaScript | JSON基本格式

    ————————————————————————————————————————————————————————— JSON 语法 "use strict"; // 简单值 &qu ...

  4. Drupal显示白屏或500?

    Drupal有时会显示白屏,或者500内部错误,这多半是由于PHP脚本什么地方有问题造成的.这个时候,可以先看看php.log里面有没有提示: [10-Oct-2013 15:55:26 Asia/S ...

  5. 【js中数组和字符串的相互转换】

    一.数组转字符串 //数组转字符串 var a, b; a = new Array(0,1,2,3,4); b = a.join(","); //得到字符串 二.字符串转数组 // ...

  6. PHP中根据IP地址判断所在城市等信息

    本篇文章由:http://xinpure.com/php-based-on-information-such-as-the-ip-address-in-your-city/ 获得IP地址 在 PHP ...

  7. Solr4.0使用

    http://blog.sina.com.cn/s/blog_64dab14801013k7g.html Solr简介 Solr是一个非常流行的,高性能的开源企业级搜索引擎平台,属于Apache Lu ...

  8. ADB 高级应用

    一.利用无线来查看adb shell > adb tcpip 5555   连接: > adb connect IP:5555   见后文<调试注意事项>   二.模拟按键   ...

  9. nodejs express route 的用法

    express 中文社区:http://expressjs.jser.us/community.html nodejs express route 的用法 1. 首先是最基本的用法. 1 2 3 4 ...

  10. springboot常见异常解决方案

    1.@Transactional类注入失败 spring的代理模式有2种::java自带的动态代理模式和cglib代理模式,默认情况下使用的java自带的代理模式. 对于这2种模式,java自带的适用 ...