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

Dojo aspect before not working on dojo request

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

我需要使用 dojo/aspect 为这些请求添加 before 建议。

docs好像比较容易理解。

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

'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 .

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

是否有明显的事情被我忽略了?

编辑

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

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

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

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

在您的例子中,"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");
            });
        }
        ......
    });
});