论坛首页 Web前端技术论坛

发现treefilter中reverse属性的问题

浏览 2996 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-18  
在treefilter中的reverse属性,我理解是当它为真时,将把要过滤的不相同的显示出来,相同的不显示,例如
  new xt.TreeFilter(stree).filter('data');

默认是false,这就是只把text中以data开头的节点都显示出来,如果这样
  new xt.TreeFilter(stree,{reverse:true}).filter('data');

应该是把data开头的不显示,其他的显示出来,但是如果这样写,将什么也显示不出来
他的源码是这样
 filterBy : function(fn, scope, startNode){
        startNode = startNode || this.tree.root;
        if(this.autoClear){
            this.clear();
        }
        var af = this.filtered, rv = this.reverse;
        var f = function(n){
            if(n == startNode){
                return true;
            }
            if(af[n.id]){
                return false;
            }
            var m = fn.call(scope || n, n);
            if(!m || rv){//这里当我的rv也就是reverse为真,那么恒为真,就是都被隐藏了
                af[n.id] = n;
                n.ui.hide();
                return false; 
            }
            return true;
        };
        startNode.cascade(f);
        if(this.remove){
           for(var id in af){
               if(typeof id != "function"){
                   var n = af[id];
                   if(n && n.parentNode){
                       n.parentNode.removeChild(n);
                   }
               }
           }
        }
    },

我改了这个方法
Ext.override(Ext.tree.TreeFilter,{
        filterBy : function(fn, scope, startNode){
        startNode = startNode || this.tree.root;
        if(this.autoClear){
            this.clear();
        }
        var af = this.filtered, rv = this.reverse;
        var f = function(n){
            if(n == startNode){
                return true;
            }
            if(af[n.id]){
                return false;
            }
            var m = fn.call(scope || n, n);
            if(!(m ^rv)){//这里使用同或就是都为真隐藏,都为假也隐藏,这时你再试就是翻转为false时,只显示我过滤的东西,翻转为真时,只显示其他
                af[n.id] = n;
                n.ui.hide();
                return false; 
            }
            return true;
        };
        startNode.cascade(f);
        if(this.remove){
           for(var id in af){
               if(typeof id != "function"){
                   var n = af[id];
                   if(n && n.parentNode){
                       n.parentNode.removeChild(n);
                   }
               }
           }
        }
    }
})
   发表时间:2008-04-07  
楼主!非常好....你那个扩展什么意思?有点看不明白....我现在就是想做个tree的过滤功能.....也等于查询功能....我的就是查询.
Ext.onReady(function(){

tree = new Ext.tree.TreePanel({
    el:'tree'
});



root = new Ext.tree.TreeNode({id:'1',text:'赣州市'});
node1 = new Ext.tree.TreeNode({id:'2',text:'黄金区'});
var node2 = new Ext.tree.TreeNode({id:'3',text:'黄金街'});
var node4 = new Ext.tree.TreeNode({id:'5',text:'红星'});
var node3 = new Ext.tree.TreeNode({id:'4',text:'章贡区'});
var node5 = new Ext.tree.TreeNode({id:'4',text:'黄金道'});
tree.setRootNode(root);
node2.appendChild(node4);
node1.appendChild(node2);
node3.appendChild(node5);
root.appendChild(node1);
root.appendChild(node3);
//root.appendChild(node4);
new Ext.tree.TreeSorter(tree,{dir:'DESC'});
tf = new Ext.tree.TreeFilter(tree,
{reverse:false,
clearBlank: true,
autoClear: true,
remove:false});


tree.render();
root.expand(true, true);


})这是我代码!但当我查询红星的时候 过滤不到了.因为它上一级就已经删除掉了....你能告诉我吗?你的代码可以拿出来看看吗???谢谢了...
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics