dojo-面向切面

  最近在研究dojo底层代码的时候,发现dojo竟然实现了类似于spring面向切面的概念--dojo/aspect

  喜欢英文的同学可以直接去dojo的官网查看API,翻译的毕竟失去原本的意境。

  aspect提供了三个方法--after、before和around。相信熟悉spring切面的同学应该知道,切面对于权限、日志等功能提供了很方便的方法。aspect主要是在后台请求的过程中使用,下面具体说一下这些方法到底可以做些什么。

  after:在调用xhr的ajax请求之后,可以使用这个方法,对返回结果进行统一的处理,这样就不用在每个xhr的请求处理函数中进行相同的操作,比如将返回数组转为jso

//此方法绑定一次,只要调用xhr的方法,就会触发下面的after内部的function
define(["dojo/aspect"], function(aspect){
  aspect.after(dojo, "xhr", function(deferred){
     return deferred.then(function(response){
        //当调用ajax成功后,会进入此方法
        //之后我们就可以统一将response格式化成json
        return dojo.fromJson(response);
     },function(err){
         //出现错误时会进入此函数
         console.info(err);
     },function(evt){
         //如果浏览器支持XHR2则从请求处理时间进展
         console.info(evt);
     });
   });
});
before:在调用ajax请求之前进行最后的操作,比如传入参数,修改请求方式等

此方法绑定一次,只要调用xhr的方法,就会触发下面before内部的function
define(["dojo/aspect"], function(aspect){
  aspect.before(dojo, "xhr", function(method, args){
    //可以修改请求的方式
    if(method == "PUT"){
      args.url += "?x-method=PUT";
      method = "POST";
    }
    //可以传入统一的参数
    args.url += "?userId=userId";
    return [method, args];
 });
});
around:请求过程中处理时间

define(["dojo/aspect"], function(aspect){
  aspect.around(dojo, "xhr", function(originalXhr){
    return function(method, args){
      //调用之前处理
      //TODO
      var deferred = originalXhr(method, args);
      //调用之后处理
      //TODO
      return deferred;
    }
  });
});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值