2013-07-19 2 views
0

Я работаю с treePanel с ExtJS 4.2.1. Моя проблема довольно тонкая, чтобы объяснить.ExtJS 4.2.1 TreePanel не обновляет, как я хочу

У меня есть две кнопки, кнопка дерева и кнопка очистки.

Когда я нажимаю кнопку «Дерево», он показывает treePanel с checkNodes, чтобы вы могли проверить некоторые узлы. У меня есть действительная кнопка в моей панели дерева, чтобы подтвердить выбор. После того, как вы нажмете эту кнопку, на панели будут добавлены проверенные узлы (точно уйдет, но это детали). Эта панель представляет собой сетку, и это список узлов, которые вы проверили. Нет проблем с этой сеткой. У меня нет проблем с этой кнопкой и моей сеткой, и когда я нажимаю на действительную кнопку, проверенные узлы правильно перечислены в моей панели сетки.

Когда я нажимаю кнопку «Очистить», которая не находится на моей панели деревьев, она очищает весь мой выбор, моя сетка становится пустой, и все узлы из моего дерева становятся неконтролируемыми (например, если вы начинаете с самого начала).

Это работает, когда я делаю это в первый раз. Я могу проверить узлы, щелкнуть по правильной кнопке, и она будет правильно добавлять мои объекты в мою панель сетки (у меня никогда не возникает проблем с моей сеткой, в которой перечислены мои проверенные узлы). Если я нажму кнопку «Очистить», список станет пустым. Затем, если я нажму кнопку «Дерево», появится панель дерева, и, если я ее расширю, я вижу, что выбор повторно инициализирован, все узлы не отмечены.

ПРОБЛЕМА: если я выполняю ту же операцию во второй раз, кажется, что она отлично работает, но панель дерева не визуализируется повторно. Я нажимаю на кнопку дерева, появляется панель дерева, и когда я ее расширяю, я вижу, что проверенные мной узлы еще проверяются. Проблема в том, что когда я хочу проконсультироваться с моими проверенными узлами с некоторыми console.log(currentChild.data.checked), я вижу, что проверенное значение равно false.

Так что, похоже, это работает с данными, но моя панель дерева неправильно обновлена ​​(только когда я выполняю операцию более одного раза).

Я не знаю, правильно ли объясняется моя проблема. Вот часть соответствующего кода.

var uncheck = false; 
button.on('click', function(){ 
     var treeSelector = createTree('stAddAction.do?action=product_tree_selector', 550, 490, '', 'lbl_st_tree_selection_empty', true, 'productlist'); 
     treeSelector.on('load', function(node, records, successful, eOpts){ 
      if (uncheck){ 
       node.tree.root.cascadeBy(function(currentChild){ 
        if (currentChild.data.checked){ 
         currentChild.data.checked = false; 
         currentChild.raw.checked = false; 
         currentChild.triggerUIUpdate(); 
         console.log(currentChild); 
        } 
       }); 
      } 
      uncheck = false; 
     }); 
     buttonClear.on('click', function(){ 

      uncheck = true; 
      treeSelector.store.proxy.url = "stAddAction.do?action=product_tree_selector"; 
      treeSelector.store.load(treeSelector.getRootNode()); 
      treeSelector.store.sync(); 
      treeSelector.getView().refresh();  
     }); 
});  

В чем проблема? Что бы это могло быть? Почему он работает один раз, но не дважды?

Спасибо

ответ

3

Вы должны использовать метод набора этого узла, чтобы изменить значение с утверждением:

currentChild.set("checked", false); 

здесь будет полный код:

var uncheck = false; 
button.on('click', function(){ 
     var treeSelector = createTree('stAddAction.do?action=product_tree_selector', 550, 490, '', 'lbl_st_tree_selection_empty', true, 'productlist'); 
     treeSelector.on('load', function(node, records, successful, eOpts){ 
      if (uncheck){ 
       node.tree.root.cascadeBy(function(currentChild){ 
        if (currentChild.data.checked){ 
         currentChild.set("checked", false); 
         console.log(currentChild); 
        } 
       }); 
      } 
      uncheck = false; 
     }); 
     buttonClear.on('click', function(){ 

      uncheck = true; 
      treeSelector.store.proxy.url = "stAddAction.do?action=product_tree_selector"; 
      treeSelector.store.load(treeSelector.getRootNode()); 
      treeSelector.store.sync(); 
      treeSelector.getView().refresh();  
     }); 
}); 
+0

Я изменил заинтересованный строк с помощью команды currentChild.set ("checked", false); '. Ядро все еще работает в первый раз, когда я выполняю операцию (создавая панель дерева, проверяя узел, проверяя, а затем щелкаю по кнопке очистки, чтобы снять отметку со всех узлов моего дерева). Когда я хочу сделать это во второй раз, панель дерева, которая появляется полностью очищенная, но вторая четкая до сих пор не работает. Если я хочу выполнить ту же операцию в третий раз, когда я нажимаю на кнопку дерева, чтобы отобразить панель дерева, узлы все еще проверяются. – Poney

+0

Я не понимаю, как он может работать один раз, но не второй раз, независимо от того, как я поворачиваю вещь. – Poney

Смежные вопросы