簡體   English   中英

如何在帶有 Odata 的 aurelia slickgrid 中使用 gt/le 運算符

[英]How to use gt/le operator in aurelia slickgrid with Odata

我想在 odata 請求中發送我自己的運算符,而不是使用 aurelia slickgrid 內置的“eq”運算符。

這是我的列定義

{
                id: 'LockoutEndDateUtc', name: 'Status', field: 'LockoutEndDateUtc', minWidth: 85, maxWidth: 95,
                type: FieldType.boolean,
                sortable: true,
                formatter: Formatters.multiple,
                params: { formatters: [this.StatusFormatter, Formatters.checkmark] },
                filterable: true,
                filter: {
                            collection: [ 
                                { value: 'le ' + (() => {const dt = new Date(); return dt.toISOString().split('.')[0] + "Z";})(), label: 'True' }, 
                                { value: 'gt ' + (() => {const dt = new Date(); return dt.toISOString().split('.')[0] + "Z";})(), label: 'False' }
                            ], //['', 'True', 'False'],
                            model: Filters.singleSelect,//multipleSelect//singleSelect,
                        }
            }

這是用戶界面在此處輸入圖像描述

這就是請求過濾器的樣子..

$filter=(LockoutEndDateUtc%20eq%20le%202022-06-28T12%3A59%3A25Z)

如果我從上述請求中刪除 %20eq,其他一切正常。 所以我的問題是如何刪除 %20eq。 或者我如何在請求中發送我自己的 gt, le。

您不能在布爾過濾器上真正做到這一點(但是您可以在帶有operator的日期過濾器上做到這一點)而且我認為我沒有添加任何方法來按照您想要的方式提供自定義過濾器搜索,但由於您使用的是 OData,因此您有更多的控制權,您可以自己更改查詢字符串。 需要明確的是,根本不建議更改 OData 查詢字符串,這是最后的解決方案,風險自負,但對於您的用例,它可能是實現您想要的唯一方法。

prepareGrid() {
    this.gridOptions = {
      // ...
      backendServiceApi: {
        service: new GridOdataService(),
        process: (query) => this.getCustomerApiCall(query),
      } as OdataServiceApi
    };
  }
}

getCustomerApiCall(query: string) {
  let finalQuery = query;
  // in your case, find the boolean value from the column and modify query

  // your logic to modify the query string
  // untested code, but it would probably look similar
  if (query.includes('LockoutEndDateUtc%20eq%20true')) {
    // calculate new date and replace boolean with new date
    finalQuery = query.replace('LockoutEndDateUtc%20eq%20true', 'LockoutEndDateUtc%20le%202022-06-28T12%3A59%3A25Z');
  }
  return finalQuery;
}

另一種可能的解決方案,但需要更多的工作。

如果我使用常規網格,沒有后端服務並且無法訪問查詢字符串,我可能會在網格外部添加一個外部下拉列表,並添加日期列,然后使用動態過濾控制網格中的過濾器. 您可以在Example 23看到一個演示,原則是您保持列的真實性質(在您的情況下為日期)並對其進行過濾,如果您想要“低於今天的日期”之類的內容,則添加一種外部動態過濾方式(a按鈕或下拉菜單)並動態控制過濾器,如下所示(來自示例 23)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM