我正在尝试为GridX
树的expand
函数使用一个around方面。
简化代码如下所示:
var myGrid = ...; // features a tree
var myConditional = ...; // some boolean
dojo.aspect.around(myGrid.tree, "expand", function(original) {
return function(id, skip) {
// TODO check the conditional and decide whether
// to return the deferred function as is, or
// return a function that does nothing but log into the console
var deferred = original(id, skip);
return deferred;
};
});
不幸的是,dojo方面的调用 as is(即,没有对我的条件进行任何检查,等等)是有问题的。
单击expando后,控制台中会抛出一个错误:
Uncaught TypeError: t.isExpanded is not a function
...指向GridX树模块的expand
原始函数的主体:
var d = new Deferred(), t = this;
if(!t.isExpanded(id) && t.canExpand(id)){ // here
显然,我对aspect around工作方式的解释是错误的,t
的作用域变成了Window
对象,而不是树本身。
我希望有我可以使用的快速修复/变通方案?
澄清我的实际目的
在某些情况下,网格底层存储所查询的后端将在短时间内无法访问。按照实现的方式,展开树的节点将查询后端。在后端不可用的非常短的窗口期间(我可以从前端代码中很容易地知道这一点),我希望忽略对expandos的单击。
2条答案
按热度按时间pbwdgjma1#
试着把树示例绑定到你的函数上,比如:
我不确定在您的案例中,某个特定的上下文在哪里丢失了,但是您可以利用它使它为您工作。
尝试重现该情况。以下是工作示例:
JS Fiddle
798qvoo82#
我找到了一个“解决方案”,看起来绝对野蛮,但对我有效。
希望有人有更好的主意,可能使用dojo/aspect。
我已经将
Tree.js
模块的代码复制到我自己的实现中,只添加了我自己的条件: