• TreePanel checkbox 联动


    经典的checkbox树默认是不会有联动处理的。这里变量INDEX_CATEGORY_CHECKING是为了避免各个节点事件触发后的递归调用,从而解决了过多递归的问题。

    代码
    'checkchange'function(node, checked){

        
    if (!INDEX_CATEGORY_CHECKING) {
            INDEX_CATEGORY_CHECKING 
    = true;

            
    // true时,子同父,父也同子
            if (checked == true) {
                node.attributes.checked 
    = true;

                
    // 父变为true,所有子都跟着变化
                (function(node) {
                    
    var _this = arguments.callee;
                    
    if (!node.isLeaf()) {
                        node.expand();
                        node.eachChild(
    function(child) {
                            child.ui.toggleCheck(
    true);
                            child.attributes.checked 
    = true;
                            _this.call(_this, child);
                        });
                    }
                 })(node);

                
    // 父变为true,父的父(如果有的话)也应该都为true
                (function(node) {
                    
    var _this = arguments.callee;
                    
    if (node.parentNode && node.parentNode != t.root) {
                        
    var pnode = node.parentNode;
                        pnode.ui.toggleCheck(
    true);
                        pnode.attributes.checked 
    = true;
                        _this.call(_this, pnode);
                    }
                 })(node);

            } 
    else { // false 时,子同父,但父不一定同子
                node.attributes.checked = false;

                
    // 父变为false,所有子跟着变化
                (function(node) {
                    
    var _this = arguments.callee;
                    
    if (!node.isLeaf()) {
                        node.expand();
                        node.eachChild(
    function(child) {
                            child.ui.toggleCheck(
    false);
                            child.attributes.checked 
    = false;
                            _this.call(_this, child);
                        });
                    }
                 })(node);

                
    // 父变为false,但父的父(如果有的话)不一定变化
                (function(node) {
                    
    var _this = arguments.callee;
                    
    if (node.parentNode && node.parentNode != t.root) {
                        
    var pnode = node.parentNode;

                        
    var chk = false;
                        pnode.eachChild(
    function(child) {
                            
    if (child.attributes.checked == true) {
                                chk 
    = true;
                                
    return false;
                            }
                        });
                        
    if (chk == true) {
                            
    return;
                        } 
    else {
                            pnode.ui.toggleCheck(
    false);
                            pnode.attributes.checked 
    = false;
                            _this.call(_this, pnode);
                        }
                    }
                 })(node);
            }

            INDEX_CATEGORY_CHECKING 
    = false;
        }
    }
     
  • 相关阅读:
    C#写的操作系统
    FPS游戏:实现狙击子弹加速
    内表的一些操作例子(工作区赋值使用了新语法)
    SAP MM模块相关透明表收集
    简单的ALV显示例子
    拼接和前导零用法
    LOOP AT GROUP语法练习
    RFC函数的初步使用同步
    excel保存时出现“请注意,您的文档的部分内容可能包含了文档检查器无法删除的个人信息”
    Abap内表
  • 原文地址:https://www.cnblogs.com/KingStar/p/1755299.html
Copyright © 2020-2023  润新知