注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Dojo中的AOP编程  

2014-01-25 09:35:58|  分类: Javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
用过Java Spring框架的人,对AOP的概念肯定不陌生,这里我们来学习一下,如何在dojo中使用AOP。
Dojo 提供aspect模块实现AOP编程。那么我们看看aspect的用法:
1. after方法:

after(target, methodName, advisingFunction, receiveArguments);

  • advisingFunction将会在目标方法(target[methodName])执行后执行,并将目标方法(target[methodName])的返回值作为advisingFunction的第一个参数,你可以在advisingFunction中定义返回值来改变最终返回值
  • 第四个参数,如果是true的话,advisingFunction的参数将变成目标方法(target[methodName])的参数

实例:

aspect.after(dojo, "xhr", function(deferred){
// returning a value replaces the return value
return deferred.then(function(response){
return dojo.fromJson(response);
});
});
var parsedResponse = dojo.xhr("GET", {...});

aspect.after(dojo, "xhr", function(method, args){
// now we have access to the original arguments
}, true);

2. before方法:

before(target, methodName, advisingFunction);

  • advisingFunction会在目标方法(target[methodName])之前执行, 并使用目标方法的参数,通过返回数组来代替目标方法(target[methodName])的参数

实例:

define(["dojo/aspect"], function(aspect){
aspect.before(dojo, "xhr", function(method, args){
// this is called before any dojo.xhr call
if(method == "PUT"){
// if the method is PUT, change it to a POST and put the method in the parameter string
args.url += "?x-method=PUT";
// return the new args
return ["POST", args];
}
});
// this will execute the original our advising function and then dojo.xhr
dojo.xhr("PUT", {...});
});

3. around方法

around(target, methodName, advisingFactory);

  • The advisingFactory should return a function that will be called when the method is called. The arguments used to call the method will be provided as the arguments to the returned advising function. The advising function’s return value will be returned from the method call.

实例:

define(["dojo/aspect"], function(aspect){
aspect.around(dojo, "xhr", function(originalXhr){
return function(method, args){
// doing something before the original call
var deferred = originalXhr(method, args);
// doing something after the original call
return deferred;
}
});
dojo.xhr("PUT", {...});
});

dojo中其他模块中的aspect实例:(在dojo/fs.js中, wipeIn and wipeOut)在动画事件onStop和onEnd后执行fini方法

var fini = function(){
s.height = "auto";
s.overflow = o;
};
aspect.after(anim, "onStop", fini, true);
aspect.after(anim, "onEnd", fini, true);


参考资料:
http://dojotoolkit.org/reference-guide/1.9/dojo/aspect.html
  评论这张
 
阅读(362)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017