【问题标题】:Disable filter in query parameter using dstore Rest使用 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 类。
有没有办法禁用这个过滤器?

【问题讨论】:

    标签: javascript dojo dstore


    【解决方案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])];
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多