Mendix---dojo.aspect模块你必须知道的
dojo/aspect 模块的官方地址: https://dojotoolkit.org/reference-guide/1.10/dojo/aspect.html#dojo-aspect
一、dojo/aspect介绍
dojo/aspect提供了面向切面编程的能力。我们可以利用他在已有的函数前,后执行自己的函数,或者阻止执行已有的函数。 dojo/aspect提供了after,before,around三个函数,三个函数的作用将在后续介绍。
1、after(target, methodName, advisingFunction, receiveArguments);函数
参数介绍: 1、target:目标对象; 2、methodName:目标对象的函数; 3、advisingFunction:自定义函数; 4、receiveArguments:advisingFunction函数 是否使用methodName函数的参数。
简单说明: receiveArguments为boolean值,如果为true,则advisingFunction函数的入参为methodName的参数。此函数作用:在目标函数执行之后执行自定义函数;advisingFunction的返回值将作为调用methodName的返回值,即after具有修改目标函数的能力。
一个例子:
define(["dojo/aspect"], function(aspect){ aspect.after(dojo, "xhr", function(deferred){ // 将会在 dojo.xhr 之后执行 }); // 执行dojo原生的函数 dojo.xhr("GET", {...}); });
2、before(target, methodName, advisingFunction)
参数介绍: 1、target:目标对象; 2、methodName:目标对象的函数; 3、advisingFunction:自定义函数 简单说明: 1、advisingFunction函数法接收的参数为methodName函数的参数; 2、advisingFunction方法可以有一个返回值, 该返回值将替换掉调用methodName(或者下一个before)时的参数, 即before有改methodName参数的能力。 3、advisingFunction的返回值需要是一个数组。
此函数的作用: 顾名思义,其主要作用是在目标函数执行之前执行自定义函数, 可以达到修改目标函数参数的作用。
一个例子:
define(["dojo/aspect"], function(aspect){ aspect.before(dojo, "xhr", function(method, args){//此参数为xhr的参数 //在xhr函数执行之前执行 if(method == "PUT"){ // 测试:修改一下入参 args.url += "?x-method=PUT"; // 返回新的参数将作为xhr的入参 return ["POST", args]; } }); // 在上述函数执行之后执行 dojo.xhr("PUT", {...}); });
3、around(target, methodName, advisingFactory);
参数说明: 1、target:目标对象; 2、methodName:目标函数 3、advisingFactory:methodName方法执行前执行的方法 简单说明: 1、advisingFactory接收的参数为目标函数methodName。 2、advisingFactory必须返回一个函数,且函数参数为 目标函数methodName的参数; 3、advisingFactory返回的函数中可以对参数重新处理, 之后选择性的调用或者不调用目标methodName, 如果调用也可以处理methodName的返回值。 4、advisingFactory返回的函数的返回值作为 最开始调用methodName的返回值。
此函数的作用:around即可以修改methodName的参数又可以修改methodName返回的结果,且methodName不一定执行
一个例子:
define(["dojo/aspect"], function(aspect){ aspect.around(dojo, "xhr", function(originalXhr){ //around()在xhr函数执行之前执行,且入参为xhr函数 //必须有一个返回函数,且入参为xhr函数的入参 return function(method, args){ // 可以做一些原始函数调用之前得操作 //选择性调用原始函数xhr var deferred = originalXhr(method, args); //自己的业务逻辑..... //此返回值将会作为xhr函数的返回值 return deferred; } }); dojo.xhr("PUT", {...}); });
参考:https://blog.csdn.net/lj15875569485/article/details/35573291
https://dojotoolkit.org/reference-guide/1.10/dojo/aspect.html#dojo-aspect
本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。
微信扫码关注
更新实时通知