I recognize that this is not an ideal solution, and that this question is a bit old, but this code has worked fairly well for me in this venue:
Ext.override(Ext.tree.TreeLoader, {
requestData : function(node, callback, scope) {
var originalDataUrl = this.dataUrl;
this.dataUrl += "/" + this.getParams(node).node;
if(this.fireEvent("beforeload", this, node, callback) !== false){
if(this.directFn){
var args = this.getParams(node);
args.push(this.processDirectResponse.createDelegate(this, [{callback: callback, node: node, scope: scope}], true));
this.directFn.apply(window, args);
}else{
this.transId = Ext.Ajax.request({
method:this.requestMethod,
url: this.dataUrl||this.url,
success: this.handleResponse,
failure: this.handleFailure,
scope: this,
argument: {callback: callback, node: node, scope: scope}
//params: this.getParams(node)
});
}
}else{
// if the load is cancelled, make sure we notify
// the node that we are done
this.runCallback(callback, scope || node, []);
}
this.dataUrl = originalDataUrl;
}
});
Really, the only big downside is the complete lack of params when you go down this road. In my case, I only needed the node ID ever. But this should at least give you a good starting point if you want to override your load method! :)