我使用Jason数组渲染一个树,我从jsp页面获取。因此树有根节点和3个节点,每个节点有5个以上的子节点,有些子节点具有相同的id和相同的文本。它呈现正确,没有问题显示。
我试图让用户选择只有一种类型的子节点(3个节点中的一个)。如果用户选择任何不是现有节点兄弟节点的节点,那么我只需要取消检查已经检查过的节点。这听起来很简单,我编码。我基本上将已检查节点的父节点(node.parentNode.id)与已检查的节点(tree.getCheckedNodes())进行了比较
问题是,当我选择具有相同id和文本的子节点时,我的逻辑失败并且他们说他们具有相同的parentNode.id,即使它们具有不同的parentNode.id。树面板是否检查重复元素并在加载时将它们分配给相同的父节点?这里有什么以及如何解决这个想法。谢谢。
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
id: 'deficiencyTree',
renderTo: 'MyTable',
title: 'Deficiencies',
height: 'auto',
width: 525,
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
rootVisible: false,
frame: false,
root:{nodeType: 'async'},
dataUrl: 'jsonFile.jsp',
listeners: {
'checkchange': function (node, checked) {
if (checked) {
selNodes = tree.getChecked();
alert(selNodes);
Ext.each(selNodes, function (nodes) {
alert("id values for node and nodes "+node.parentNode.id+" "+nodes.parentNode.id);
if (nodes.parentNode.id != node.parentNode.id)
{
nodes.getUI().toggleCheck();
}
});
}
list.length = 0;
iii = 0;
selNodess = tree.getChecked();
Ext.each(selNodess, function (nodes) {
list[iii] = nodes.id;
iii++;
});
}
}
});
tree.getRootNode().expand(false);
});
答案 0 :(得分:1)
作为一个半旁边,理想情况下,您根本不应该复制节点ID(永远不应复制ID,否则它不是ID)。如果您需要当前分配给ID字段的值,请向节点添加其他属性并将其放在此处 - 您可以在需要时引用此属性。 ExtJS不是为了完全处理同一树中的注释的重复ID而构建的。
答案 1 :(得分:0)
我使用了hierarhical id来解决这个问题:
因此,如果元素的路径为x
- > y
- > z
,那么他在树中的ID将为x+y+z
您只需要更改服务器端代码:
- 以x+y+z
格式获取ID,找到最后+
并获取z
- 返回包含ID [x+y+z+childId
]
答案 2 :(得分:0)
好消息。我搞定了。这很简单。正如“Xupypr MV”建议的那样,我不应该使用与基本功能相同的ID,所以我确实为每个节点添加了一个不同的id并添加了一个名为id2的新属性并为其分配了我需要的值然后访问它使用node.attribute [“id2”],它运行得非常好。以前我试图将属性值作为node.id2获取,就像node.id,node.text一样无效。再次感谢您的回复。