使用 dstore Rest 在查询参数中禁用过滤器
Posted
技术标签:
【中文标题】使用 dstore Rest 在查询参数中禁用过滤器【英文标题】:Disable filter in query parameter using dstore Rest 【发布时间】:2015-09-13 12:20:42 【问题描述】:因为我使用的 dgrid 对象比与 store 交互的本机 dojo 对象多,所以我想切换到 dstore 而不是 dojo.store.rest。
但是,当我将dstore
与适配器一起用于实时搜索(FilteringSelect)时,查询参数会以破坏我的api的方式进行修改:例如我输入“foo”它会发送一个请求
/api?name=match=foo*
但我想要:
/api?name=foo*
就像dojo/store/rest
一样。
我认为它来自 dstore 中的 Filter 类。
有没有办法禁用这个过滤器?
【问题讨论】:
【参考方案1】:这是我处理这个问题的方法,以及设置我使用的一些默认值
define([
'dojo/_base/declare',
'dojo/query',
'dstore/Rest'
],
function (declare, query, Rest)
var csrfHeader = query('meta[name="_csrf_header"]')[0].content,
csrfToken = query('meta[name="_csrf"]')[0].content,
headers =
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'application/json'
;
headers[csrfHeader] = csrfToken;
return declare('app.store.rest', [ Rest ],
sortParam: 'sort',
rangeStartParam: 'offset',
rangeCountParam: 'limit',
ascendingPrefix: '%2B',
descendingPrefix: '%2D',
accepts: 'application/json',
headers: headers,
_renderFilterParams: function (filter)
var _filter = this.inherited(arguments);
for(var i=0; i<_filter.length; i++)
_filter[i] = _filter[i].replace('match=', '').replace('*', '');
return _filter;
);
);
【讨论】:
【参考方案2】:我找到了实现这种行为的方法,我不得不添加 _renderFilterParams 的修改版本:
var store = new Rest(
target: '/api',
_renderFilterParams: function (filter)
var type = filter.type;
var args = filter.args;
if (!type)
return [''];
if (type === 'string')
return [args[0]];
return [encodeURIComponent(args[0]) + '=' + encodeURIComponent(args[1])];
);
【讨论】:
以上是关于使用 dstore Rest 在查询参数中禁用过滤器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django rest 框架从 GET 请求的查询参数中过滤多个 id?