ExtJS Tree相同的parentNode

时间:2010-10-28 23:47:38

标签: ajax extjs tree

我使用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);
});

3 个答案:

答案 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一样无效。再次感谢您的回复。