1

我們正在使用內置分頁/排序/過濾的第三方網格(telerik kendo)。它將在進行GET調用時以某種方式發送請求,並且我試圖確定是否有辦法將這些請求轉換爲適用於AutoQuery的請求。將請求轉換爲自動查詢友好的

查詢字符串PARAMS

排序模式:

sort[{0}][field] and sort[{0}][dir] 

過濾:

filter[filters][{0}][field] 
filter[filters][{0}][operator] 
filter[filters][{0}][value] 

所以這這是在查詢字符串填充:

filter[filters][0][field] 
filter[filters][0][operator] 
filter[filters][0][value] 

需要ŧ o被翻譯成。

FieldName=1 //  filter[filters][0][field]+filter[filters][0][operator]+filter[filters][0][value] in a nutshell (not exactly true) 

我應該通過刪除過濾器(或只是添加我需要的)來操縱插件中的查詢字符串對象嗎?這裏有更好的選擇嗎?

我不確定是否有一個乾淨的方式在劍道這邊做到這一點。

回答

1

我會解釋我要走的兩條路線,希望能看到更好的答案。

首先,我試圖修改請求過濾器中的查詢字符串,但不能。我最終不得不通過在調用AutoQuery.Execute之前獲取參數並修改它們來手動運行自動查詢。這樣的事情:

var requestparams = Request.ToAutoQueryParams(); 
var q = AutoQueryDb.CreateQuery(requestobject, requestparams); 
AutoQueryDb.Execute(requestobject, q); 

我希望有一個更全球的方式來做到這一點。擴展方法只是遍歷所有查詢字符串並添加我需要的。

做好以上工作後,我也不是很高興的結果,所以我研究了不同做它,結束了以下內容:

註冊劍道格過濾器操作爲等效的服務棧自動查詢者:

var aq = new AutoQueryFeature { MaxLimit = 100, EnableAutoQueryViewer=true }; 
     aq.ImplicitConventions.Add("%neq", aq.ImplicitConventions["%NotEqualTo"]); 
     aq.ImplicitConventions.Add("%eq", "{Field} = {Value}"); 

接下來,對電網的讀操作,我們需要重新格式化查詢字符串:

read: { 
           url: "/api/stuff?format=json&isGrid=true", 
           data: function (options) { 
            if (options.sort && options.sort.length > 0) { 
             options.OrderBy = (options.sort[0].dir == "desc" ? "-" : "") + options.sort[0].field; 
            } 
            if (options.filter && options.filter.filters.length > 0) { 
             for (var i = 0; i < options.filter.filters.length; i++) { 
              var f = options.filter.filters[i]; 
              console.log(f); 
              options[f.field + f.operator] = f.value; 
             } 
            } 

           } 

現在,網格將發以自動查詢友好的方式進行操作。