为什么在 ExtJs 中禁用节点会使复选框仍然可用?

Why disabling node in ExtJs makes checkbox still available?

我正在使用与 Magento 捆绑在一起的 ExtJs 在检查节点后禁用一行中的类别节点。

我可以禁用来自相同 'level' 的节点,但复选框输入仍然可用于检查它们。

到目前为止,这是我的代码:

tree.on('check', function(node) {
    if(node.attributes.checked) {
        categoryAdd(node.id);
        //disable nodes except checked Node
        for (var i = 0; i < node.parentNode.childNodes.length; i++) {
            var actualNode = node.parentNode.childNodes[i];
            if (!actualNode.attributes.checked) {
                actualNode.disable();
            }
        }
    } else {
        categoryRemove(node.id);
        //enable all nodes
        for (var i = 0; i < node.parentNode.childNodes.length; i++) {
            var actualNode = node.parentNode.childNodes[i];
            actualNode.enable();
        }
    }
    varienElementMethods.setHasChanges(node.getUI().checkbox);
}, tree);

这是为了理解这段代码的作用而捕获的。

要禁用输入或将输入设置为只读模式,您应该使用 DomQuery 并为每个输入设置属性:

var readonly = true;
var checkBoxes = Ext.DomQuery.select("DIV[@id='" + myTreeid + "']")[0].getElementsByTagName("input");
Ext.each(checkBoxes, function(cb){
   cb.setAttribute('disabled', readonly);
});