我们的人员如下所示:
M1
A1
AA1
AAA1
A2
AA2
AAA2
A3
AA3
M2
B1
BB1
BBB1
B2
BB2
M3
C1
C2
C3
最初,层次结构将被折叠,因此如下所示:
+ M1
+ M2
+ M3
有一个“全部展开”选项,单击后应以异步方式展开所有级别。我们有以下代码可以实现这一目标:
function expandAll() {
expandAll(mainDirects);
}
function expandAll(directs){
if(!directs){
return;
}
_.each(directs, function (direct){
if(direct.IsManager){
direct.expand().then(function(node){
expandAll(node.directs)
});
}
});
}
direct.expand()
是一种对服务进行http调用以获取给定管理器的指令的方法。我们遇到的问题是,只有给定级别的最后一个直接呼叫才打入该级别所有直接呼叫的服务,即对于M1和M2,显示的层次结构是M3的层次结构(如下所示)。由于是递归,因此在更高级别上也发生了同样的事情,因此A1和A2的继承关系就是A3的继承关系。
M1
C1
AA3
C2
AA3
C3
AA3
M2
C1
BB2
C2
BB2
C3
M3
C1
C2
C3
看起来像$http
排队所有请求,只有最后一个被执行N次。知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:0)
尝试使用以下内容
var k = 0;
_.each(directs, function (direct){
(function(k) {
if(direct.IsManager){
direct.expand().then(function(node){
expandAll(node.directs);
k++;
});
}
})(k);
});
代替
_.each(directs, function (direct){
if(direct.IsManager){
direct.expand().then(function(node){
expandAll(node.directs)
});
}
});