当baseParams通过dataUrl发送到服务器时,是否可以更改ExtJS创建的URL的结构?
例如,因为它设置baseParams如下:
baseParams: {
category: 2
},
dataUrl:'testclass.php'
将创建以下请求字符串:
testclass.php?category=2
我想要做的是以一种宁静的方式检索数据:
testclass/category/2
ExtJS可以使用这种URL结构吗?谢谢。
答案 0 :(得分:1)
当然,您可以编写自己的TreeLoader,这是IIRC的唯一途径。
答案 1 :(得分:1)
我认识到这不是一个理想的解决方案,而且这个问题有点陈旧,但是这个代码在这个场所对我来说效果很好:
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;
}
});
真的,唯一的大缺点是当你走这条路时完全没有障碍。就我而言,我只需要节点ID。但是如果你想覆盖你的加载方法,这至少应该给你一个很好的起点! :)