Мне нужен метод «сброса», чтобы снять все проверенные узлы в Ext.tree.TreePanel
.Как снять все узлы дерева в Ext.tree.TreePanel?
ответ
Я нашел способ, как показано ниже, но, кажется, метод «casecade» не работал хорошо, мне нужно позвонить «сбросить» несколько раз непроверенным всех проверяемых детей:
reset: function(){
startNode = this.root;
var f = function() {
if (this.attributes.checked) {
this.attributes.checked = false;
this.getUI().toggleCheck(false);
}
};
startNode.cascade(f);
}
tree.getRootNode().cascade(function(n) {
var ui = n.getUI();
ui.toggleCheck(false);
});
Как выяснили здесь: http://www.sencha.com/forum/showthread.php?12888-solved-programatically-unchecking-checked-tree-nodes&p=62845#post62845
Мне не удалось получить ни один из других ответов для работы с Extjs 4.0.7. Кроме того, использование метода «каскада» выдало предупреждение о том, что оно устарело. Вместо этого рекомендуется использовать «cascadeBy». Помимо имени метода, мне не удалось найти разницу в сигнатуре метода (те же аргументы, это, поведение).
Однако мне удалось найти этот код, который работал:
{
xtype: 'button',
text: 'Deselect All',
listeners:{
click: function(){
var tree = Ext.ComponentQuery.query('treepanel[itemId=user_flags_tree]')[0];
tree.getRootNode().cascadeBy(function(){
this.set('checked', false);
});
}
}
}
Благодаря этому сообщению: http://www.sencha.com/forum/showthread.php?149627-Programmaticaly-check-uncheck-checkboxes-in-the-Tree-panel
var nodes = treePanel.getView().getNodes();
var records = treePanel.getView().getRecords(nodes);
for (var i = 0; i < records.length; i++) {
records[i].set('checked',true);
}
действительно, cascadeBy (функция() {this.set («проверяемого ', ложный);}); делает трюк! – martyglaubitz