04
2019
06

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,我们将及时处理。

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。