因为我使用的dgrid对象多于与存储交互的本地dojo对象,所以我希望切换到dstore而不是dojo.store.rest。
但是,当我使用带有实时搜索适配器(FilteringSelect)的dstore时,查询参数被修改的方式破坏了我的api:例如,我输入"foo“,它会向其发送请求
/api?name=match=foo*
但我想:
/api?name=foo*
就像dojo/store/rest一样。我想它来自于dstore中的Filter类。
有没有办法禁用这个过滤器?
发布于 2017-10-16 07:32:45
下面是我如何处理这个问题,以及设置一些我使用的默认值
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;
}
});
});发布于 2015-09-15 02:39:14
我找到了一种方法来实现这个行为,我必须添加一个修改过的_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])];
}
});https://stackoverflow.com/questions/32549584
复制相似问题