extjs4.0 tree 整體刷新,對單個節點的增刪改問題

轉自:http://blog.csdn.net/zhangzhida163/article/details/7222118


extjs4.0 tree的刷新問題困擾了我好一段時間,看官方的例子,看api,百度谷歌是一頓搜索,但是始終不得其解。因爲是要對樹進行增刪改的操作,所以想到只要我點了保存按鈕,我讓tree一次性刷新豈不是很方便的事情。treestore.load(),多方便啊,可是事實總不如願,我是有多少節點,它就給我刷新多少次啊。去百度查,有人說load()裏面是需要參數的,你想刷新哪個點就把哪個節點放進去。。。結果依然如舊。然後就是看treestore方法的各種源碼,當然看不太懂,總好過瞎比劃。後來想到折中的辦法了。

        我不是要最樹進行增刪改麼,我就用treestore.getRootNode()或者treestore.getRootById(object id).這兩個方法的返回值是Ext.data.NodeInterface.這個對象是有insert,remove方法的,可以對獲取到的節點的子節點進行操作。

       所以啊,如果我對tree添加了一個節點,那我就先根據id找到它的父節點,然後在調用(Number index, Ext.data.Model node ) 或者(Node node, Node refNode, Object suppressEvents ) 方法進行添加。刪除呢就是同樣的找到父節點再調用(Node node, Boolean destroy, Object suppressEvents, Object suppressNodeUpdate )方法就OK。修改呢就調用(Node newChild, Node oldChild, Object suppressEvents )。這個如果對於簡單的tree來說還好辦,但是如果tree數據量大,層數多,邏輯複雜的就不好整了,反正後來我是自己整迷糊了。

    再後來,又迴歸原點,想整個刷新,一勞永逸,又是各種問,還真讓我問到了。。。就是重寫treestore.load()方法


Ext.override(Ext.data.TreeStore, {
    load : function(options) {
        options = options || {};
        options.params = options.params || {};

        var me = this, node = options.node || me.tree.getRootNode(), root;

        // If there is not a node it means the user hasnt defined a rootnode
        // yet. In this case lets just
        // create one for them.
        if (!node) {
            node = me.setRootNode( {
                expanded : true
            });
        }

        if (me.clearOnLoad) {
            node.removeAll(false);
        }

        Ext.applyIf(options, {
            node : node
        });
        options.params[me.nodeParam] = node ? node.getId() : 'root';

        if (node) {
            node.set('loading', true);
        }
        return me.callParent( [ options ]);
    }
});


複製粘貼到JS裏面,然後慷慨大方的調用load()方法吧。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章