簡體   English   中英

Kendo Grid具有多選列的自定義過濾器功能

[英]Custom filter function for Kendo Grid with multiselect column

我需要編寫一個自定義過濾器函數。 我有一個Kendo網格,其中有多個列,即名稱,年齡,城市。 名稱列應為多選。 現在,當進行過濾時,整個網格上的邏輯應為“和”,但特定的列(名稱)應具有“或”邏輯。

我看過這篇文章和其他幾篇類似的文章。 在此示例中,telerik建議刪除data-bind屬性

element.removeAttr("data-bind");

直到我要清除multiselect字段中的所有標簽之前,這確實非常有效。 僅供參考,將網格配置為filterMode:“行”。 在這種情況下,標記根本不會清除。

所以現在,我在這里嘗試編寫自定義過濾器函數。 這是我到目前為止的內容:

filterable: {
    multi: true,
    cell: {
        template: function getteamplate(args) {
            args.element.kendoMultiSelect({
                dataSource: args.dataSource,
                dataTextField: "name",
                dataValueField: "name",
                change: function change(e) {
                    var dataSource = $scope.grid.dataSource;

                    // if filters are not yet set, do so now
                    if (!dataSource.filter()) {
                         $scope.grid.dataSource.filter({
                             logic: "and",
                             filters: []
                         });
                    }

                    var dataFilters = dataSource.filter().filters;

                    var values = this.value();
                    if (values.length > 0) {
                        $log.log("filtering");
                        var newFilter = {
                            field: "name",
                            operator: function operator(item, value) {
                                $log.log("Item: " + item);
                                $log.log(value());
                                var found = false;

                                value().forEach(function forEach(element) {
                                    $log.log("Value: " + element);
                                    if (item.indexOf(element) !== -1) {
                                       found = true;
                                    }
                                });
                                return found;
                            },
                            value: values,
                            fieldName: "dataSource"
                        };

                        dataFilters.push(newFilter);
                        $log.log(dataFilters);
                    }

                    dataSource.filter({
                        logic: "and",
                        filters: dataFilters
                    });
                }
            });

            //args.element.removeAttr("data-bind");
        },

        showOperators: false
    }
}

有兩點值得注意

  1. 我的自定義過濾器功能似乎從未執行,因為在控制台中看不到任何內容。
  2. 在此論壇帖子之后 ,此代碼似乎非常簡單:

    運算符:function(item,value){//實現邏輯}

除非記錄得不好,而且我不確定參數“ item”和“ value”是什么或它們來自何處。

有點遲了,但是沒關系。 為了正確清除標簽,我添加了以下內容

  1. 向multiselect對象的dom元素添加了一個id屬性,如下所示

  function getteamplate(args) { args.element[0].id = "<<filterElementID>>"; args.element.kendoMultiSelect({ dataSource: args.dataSource, ............. 

  1. 在網格的dataSource dataBound事件中添加了一個檢查,以便每當dataSource過濾器不包含“ MultiSelect”過濾器(filter.field = name)時,清除dom元素的值

 if(!_.find(this.dataSource.filter() ? this.dataSource.filter().filters : [] , function(filter){ return filter.field == "name" })) $("#<<filterElementID>>").data().kendoMultiSelect.value([]); 

暫無
暫無

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

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