在不处理dojo请求之前的Dojo方面

时间:2017-12-04 15:28:26

标签: javascript dojo aspect

我有一个使用dojo/request向服务器提交各种请求的Dojo类。

我需要使用dojo/aspect在建议之前为这些请求添加

docs似乎相对容易理解。

我的类声明看起来像这样:

'myPackage/MyClass':function(){
    define("myPackage/MyClass", [
        "dojo/request", 
        // etc. etc. 
        "dojo/aspect"
    ], function(request, ..., aspect) {
        return declare("myPackage.MyClass", null, {
            constructor: function(options){
                aspect.before(dojo, "request", 
                    function(url, args){
                        // TODO
                        alert("before advice applied"); 
                    }
                );
            },
            // various functions that use dojo request
        });
    }

);
}

我的问题是之前的建议永远不会被执行。

我尝试了一些变体,例如定位this而不是dojo,或者直接定位request,并且在检查xhr时它唯一可见的功能。

我甚至在绝望中回到了文档页面,并尝试使用方法dojo定位"xhr"以查看是否偶然无法在内部调用,但没有任何效果。

是否有一些我忽略的显而易见的东西?

修改

我尝试修改我的代码,以便针对this和常用函数执行before建议。

类似于:aspect.before(this, "theFrequentlyUsedFunction",

这开箱即用,这意味着我可以使用繁琐的解决方法并为每个调用before的函数添加request建议,假设前面的语句的时间复杂度request调用这些函数是微不足道的。

到目前为止,我的结论是,在Dojo request调用之前应用建议时,我没有引用正确的目标和函数名称,但我仍然感到困惑,因为这不起作用。

1 个答案:

答案 0 :(得分:2)

在您的情况下,“request”不是“dojo”对象的属性。它只是函数传递的参数名称。因此,您可以将其分配给任何对象的任何属性,甚至分配给模块的属性。所以你接近解决方案。看看我的例子:

define([
    "dojo/_base/declare",
    .....
    "dojo/request",
    "dojo/aspect"
], function (
    declare,
    .....
    request,
    aspect
) {

    return declare("Test", [...], {            
        request: request,  
        constructor: function () {
            aspect.before(this, "request", function () {
                console.log("before advice applied");
            });
        }
        ......
    });
});