不处理 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");
});
}
......
});
});
我有一个 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");
});
}
......
});
});