ExtJS Tree тот же parentNode - PullRequest
       4

ExtJS Tree тот же parentNode

2 голосов
/ 29 октября 2010

Я рендеринг дерева, используя массив Jason, который я получаю со страницы JSP.Таким образом, дерево имеет корневой узел и 3 узла, и каждый узел имеет более 5 дочерних элементов, а некоторые дочерние элементы имеют одинаковый идентификатор и одинаковый текст.Он отображается правильно и не отображает никаких проблем.

Я пытаюсь заставить пользователя выбирать дочерние узлы только одного типа (один из 3 узлов).если пользователь выбирает какой-либо узел, который не является братом уже существующего узла, тогда мне просто нужно отменить проверку уже проверенных узлов.Это звучит довольно просто, и я кодировал это.Я в основном сравнил родительские узлы (node.parentNode.id) проверенного узла с уже проверенными узлами (tree.getCheckedNodes ())

проблема в том, что когда я выбираю дочерние узлы с одинаковым идентификатором и отправляю текстлогика не работает, и они говорят, что у них один и тот же 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 ]

1 голос
/ 29 октября 2010

Как полупериод, в идеале вы не должны вообще копировать идентификаторы узлов (идентификатор никогда не должен реплицироваться, иначе это не идентификатор).Если вам нужно значение, которое вы в настоящее время присваиваете полю ID, добавьте дополнительный атрибут к узлу и разместите его здесь - вы можете обратиться к этому атрибуту, когда вам нужно.ExtJS вообще не очень хорошо обрабатывает дубликаты ID для заметок в одном и том же дереве.

0 голосов
/ 30 октября 2010

Хорошие новости.Я получил это работает.это было довольно просто.Как и предполагал «Xupypr MV», я не должен использовать один и тот же идентификатор, который противоречит базовой функциональности, поэтому я поставил разные идентификаторы для каждого узла и добавил новый атрибут с именем id2, присвоил ему нужное мне значение и затем получил к нему доступиспользуя node.attribute ["id2"], и он работает на отлично.Ранее я пытался получить значение атрибута как node.id2, так же как node.id, node.text, который не работал.Еще раз спасибо за ответы.

0 голосов
/ 29 октября 2010

Я использовал иерархические идентификаторы для решения этой проблемы: поэтому, если путь к элементу был x -> y -> z, то его идентификатор в дереве будет x+y+z

вам просто нужно изменить код на стороне сервера: - Получить идентификатор в формате x+y+z, найти последний + и получить z - Вернуть элементы с идентификаторами [x+y+z+childId]

...