看了大多数解决load多次请求的方法基本上都是重构load,稍稍看了一下方法内容,其实也就改了一小段代码:
   if (me.clearOnLoad) {
node.removeAll(false);
   }将removeAll改为了false,我想了一下,如果我把treeStore的clearOnLoad属性设为false,不就不走这个条件了么,也就不会removeAll节点了。所以试了一下,发现多次请求是不发送了,只发了一次,可是前台却报错了internalId为空或不为对象,让我很奇怪。我什么都没改,只是将属性由默认的true改成了false,为什么会报这个错呢。难道真的只能重构load方法?????

解决方案 »

  1.   

    重写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 ]);
        }
    });