9

javaScriptでレンダリングされたKendoUIグリッドがあります。文字列列に単一のオプション(「含む」)があり、2番目のフィルターがないようにしたい。これまでのところ良い、私は書いた

        $("#MyGrid").kendoGrid({
            // other bits of configuration here
            filterable: {
                extra:false, 
                operators: {
                    string:{ contains: "Contains"}
                }
            },
            // more bits of configuration here
        });

グリッドの定義の一部として。そして、結果は見栄えがします(オプションが1つしかないため、ドロップダウンは冗長です)。

定義したとおりにフィルタリングする

ただし、これに関係なく、フィルターは、contains操作(使用可能な唯一の操作)ではなく、equals操作を実行します。

私はこれを理解しようとしばらく時間を費やしましたが、見つけたコードが機能しないか、意味がないか、またはその両方であるため、円を描いて回り続けています。

フィルタをデフォルトで「IsEqualTo」ではなく「Contains」に設定する方法を教えてもらえますか?

4

5 に答える 5

10

オプションが 1 つしかない場合やレイアウトに満足できない場合は、"ui : func( element ) { }" オーバーロードを使用してフィルター コントロールを完全にカスタマイズできます。このオーバーロードは Kendo の新しいバージョン (v2013.1.319 など) に含まれています。

columns : [
    { field: "MyCity", width: 80, title : "City", filterable: customTextFilter },
    { field: "CreatedAt", width: 72, title: "Created", filterable: $scope.customDateFilter }
]

次に、外観をカスタマイズする関数を次に示します。

var customTextFilter =
    {
        extra : false,
        operators : { string : { contains : "Contains"}},
        ui : function( element )
        {
            var parent = element.parent();
            while( parent.children().length > 1 )
                $(parent.children()[0]).remove( );

            parent.prepend( "<input data-bind=\"value:filters[0].value\" class=\"k-textbox\" type=\"text\">" );
        }
    }

GTE/LTE 形式の 2 つの日付ボックスの例を次に示します。

var customDateFilter =
    {
        extra : true,
        operators : { },
        ui : function( element )
        {
            var parent = element.parent();
            while( parent.children().length > 1 )
                $(parent.children()[0]).remove( );

            parent.prepend(
                "On or after:<br/><span class=\"k-widget k-datepicker k-header\">" +
                "<span class=\"k-picker-wrap k-state-default\">" +
                "<input data-bind=\"value:filters[0].value\" class=\"k-input\" type=\"text\" data-role=\"datepicker\"" +
                " style=\"width: 100%\" role=\"textbox\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-disabled=\"false\" " +
                " aria-readonly=\"false\" aria-label=\"Choose a date\">" +
                "<span unselectable=\"on\" class=\"k-select\" role=\"button\">" +
                "<span unselectable=\"on\" class=\"k-icon k-i-calendar\">select</span></span></span></span>" +

                "<br/>On or before:<br/>" +
                "<span class=\"k-widget k-datepicker k-header\"><span class=\"k-picker-wrap k-state-default\">" +
                "<input data-bind=\"value: filters[1].value\" class=\"k-input\" type=\"text\" data-role=\"datepicker\"" +
                " style=\"width: 100%\" role=\"textbox\" aria-haspopup=\"true\" aria-expanded=\"false\" " +
                " aria-disabled=\"false\" aria-readonly=\"false\" aria-label=\"Choose a date\">" +
                "<span unselectable=\"on\" class=\"k-select\" role=\"button\">" +
                "<span unselectable=\"on\" class=\"k-icon k-i-calendar\">select</span></span></span></span>"
            );
        }
    };

もちろん、好きなようにテンプレートを作成して、日付、ブール値などのさまざまなカスタム フィルターを作成することもできます。上記の日付バージョンで、フィルターの "gte" と "lte" と言うように演算子を正しく設定したい場合は注意してください。 .operator と filter[1].operator を dataSource.filter 属性に次のように設定するだけです。

    dataSource: {
        transport :
        {
            read : function( context )
            {
                //note that here context.filter.filters has the array
                //of applied filters -- you can write a custom RESTful call
                //such as angular $http.get( ) or use Kendo native format to
                //send filter options to server.
            }
        },
        //filter settings here initialize filter[0], filter[1], etc.
        filter : [ 
           { field : "CreatedAt", operator : "gte" },
           { field : "CreatedAt", operator : "lte" }]
   }
于 2013-04-23T20:04:14.040 に答える
8

すべてのインスタンスのデフォルト オペレータを変更する最良の方法は次のとおりです。

kendo.ui.FilterMenu.prototype.options.operators =           
  $.extend(kendo.ui.FilterMenu.prototype.options.operators, {
  string: {
      contains: "Contains",
      startswith: "Starts with",
      eq: "Is equal to",
      neq: "Is not equal to",
      doesnotcontain: "Does not contain",
      endswith: "Ends with"
  }
});

および完全なスクリプト:

kendo.ui.FilterMenu.prototype.options.operators =           
  $.extend(kendo.ui.FilterMenu.prototype.options.operators, {

/* FILTER MENU OPERATORS (for each supported data type) 
 ****************************************************************************/   
  string: {
      contains: "Contains",
      startswith: "Starts with",
      eq: "Is equal to",
      neq: "Is not equal to",
      doesnotcontain: "Does not contain",
      endswith: "Ends with"
  },
  number: {
      eq: "Is equal to",
      neq: "Is not equal to",
      gte: "Is greater than or equal to",
      gt: "Is greater than",
      lte: "Is less than or equal to",
      lt: "Is less than"
  },
  date: {
      eq: "Is equal to",
      neq: "Is not equal to",
      gte: "Is after or equal to",
      gt: "Is after",
      lte: "Is before or equal to",
      lt: "Is before"
  },
  enums: {
      eq: "Is equal to",
      neq: "Is not equal to"
  }
 /***************************************************************************/   
});
于 2015-10-31T07:37:30.317 に答える
7

私は同じ問題を抱えていました.Clear()オプションが必要です!

Razor で MVC ラッパーを使用してグリッドを構築しています。

@(Html.Kendo().Grid<LocationViewModel>()
    .Name("locationGrid")
    // other bits of configuration here
    .ColumnMenu()
    .Filterable(f => f.Operators(o => o.ForString(s => s
        .Clear()
        .Contains("Contains")
        .DoesNotContain("Does not contain")
        .EndsWith("Ends with")
    )))
    // other bits of configuration here
)

概要:

  1. .Clear()が必要です!
  2. 仕分け必須!.Contains()最初に置いてから.Clear()、デフォルトは [Contains!] です。

追加情報: Kendo UI 2013.1.514 を使用しています

于 2013-09-13T09:02:09.160 に答える
7

最新の内部ビルドに更新してみてください。2012.3.1304以降のバージョンには修正が含まれている必要があります。

于 2013-01-14T17:23:20.883 に答える
1

filterable: { operator: { number: { gte: "以上" } } }

于 2015-01-22T21:51:44.843 に答える