Javascript 如何在ExtJS 4.1.0代理或读取器中更改请求URI

Javascript 如何在ExtJS 4.1.0代理或读取器中更改请求URI,javascript,rest,extjs,extjs4,uri,Javascript,Rest,Extjs,Extjs4,Uri,实际上,带有Rest代理和Json读取器的ExtJS 4.1要求这样的URI(尽管是urlencoded): http://localhost:8000/api/v1/choice/?filter=[{“属性”:“问题id”,“值”:2}] 我的服务器希望筛选请求看起来像: http://localhost:8000/api/v1/choice/?question_id=2 我已经查看了代理的filterParamconfig,但它似乎并不相关。是否有一种实用的方法来实现服务器所需的请求URI?

实际上,带有Rest代理和Json读取器的ExtJS 4.1要求这样的URI(尽管是urlencoded):

http://localhost:8000/api/v1/choice/?filter=[{“属性”:“问题id”,“值”:2}]

我的服务器希望筛选请求看起来像:

http://localhost:8000/api/v1/choice/?question_id=2


我已经查看了代理的
filterParam
config,但它似乎并不相关。是否有一种实用的方法来实现服务器所需的请求URI?

没有简单(容易)的方法。您必须扩展现有的
代理
类。查看
Ext.data.proxy.proxy
Ext.data.proxy.Server
的源代码。首先看看函数
getParams
buildUrl

下面的内容并不漂亮,但它很有效。现在去修理那该死的商店

/**
         * Customized to send ../?prop=val&prop2=val2 urls.
         */
        buildUrl: function(request) {
            var url = this.url;
            var filters = eval(request.params['filter']);
            if (filters) {
                delete request.params['filter'];
                url += '?'
                for (var i = 0; i < filters.length; i++) {
                    var filterString = filters[i].property + "=" + filters[i].value;
                    if (url.slice(url.length-1) === '?') {
                        url += filterString;
                    } else {
                        url += '&' + filterstring;
                    } 
                }
            };
            return url;
        },
/**
*自定义以发送../?prop=val&prop2=val2 URL。
*/
buildUrl:函数(请求){
var url=this.url;
var filters=eval(request.params['filter']);
如果(过滤器){
删除request.params['filter'];
url+='?'
对于(变量i=0;i
谢谢。我现在正在查看
buildUrl
。如果我得到了一些工作,我会张贴它来结束这件事。