如何取消选中Ext.tree.TreePanel中的所有树节点?

时间:2010-12-15 13:26:07

标签: extjs treepanel

我想要一个'重置'方法来取消选中Ext.tree.TreePanel中所有选中的节点。

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

我找到了一个如下方法,但似乎“级联”方法效果不好,我需要多次调用'reset'取消选中所有已检查的子项:

reset: function (){
            startNode = this.root;
            var f = function () {
                if (this.attributes.checked) {
                    this.attributes.checked = false;
                    this.getUI().toggleCheck(false);
                }
            };
            startNode.cascade(f);
        }

答案 2 :(得分:2)

我无法获得使用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

答案 3 :(得分:0)

var nodes = treePanel.getView().getNodes();
var records = treePanel.getView().getRecords(nodes);
for (var i = 0; i < records.length; i++) {
    records[i].set('checked',true);
}