Kendo 在数字列上使用多重过滤器的网格抛出错误

Kendo grid with Multi Filter on number column throws error

我有一个如下所述的 kendo 网格。看起来很好,所有其他列都工作正常,除了我不能在 "Round" 列上使用客户端过滤器。多 select 过滤器看起来不错,但是当我 select 一些值并按下 "filter" 按钮时,它会抛出 javascript 错误 - 仅针对此列!它甚至可以正确排序。

Uncaught TypeError: (GameType.RoundNo || "").toLowerCase is not a function

这似乎是由架构中的 GameType 对象的结构引起的。我无法将数据类型设置为 type:"number",因为我需要为该网格的编辑功能设置默认值(我已从下面的示例中省略)。我不知道如何同时设置默认值和数据类型,我什至不确定这是否能解决我的问题。

<div id="tblGames"></div>

<script src="http://cdn.kendostatic.com/2015.1.429/js/kendo.all.min.js"></script>

<script>
  $(document).ready(function () {
    $("#tblGames").kendoGrid({
      sortable: true,
      groupable: true,
      filterable: true,
      columns: [
        { field: "Season", title: "Season", type: "number", filterable: { multi: true }, width: 100 },
        { field: "GameType.RoundNo", title: "Round", type: "number", filterable: { multi: true }, width: 90 },
        { field: "GameDate", title: "Date", type: "date", format: "{0:dd/MMM hh:mmtt}", width: 130 },
        { field: "Grade.GradeName", title: "Grade", filterable: { multi: true } },
        { field: "HomeTeam.TeamName", title: "Home", filterable: { multi: true } },
        { field: "AwayTeam.TeamName", title: "Away", filterable: { multi: true } },
        { title: "Score", template: "#= ScoreFor + ' - ' + ScoreAgainst #", width: 70, filterable: false },
        { field: "IsPlayed", title: "Played?", filterable: { multi: true }, width: 95 }
      ],
      dataSource: { 
        schema: {
          model: {
            id: "GameID",
            fields: {
              GameID: { editable: false, defaultValue: 0 },
              GameType: { defaultValue: { GameTypeID: 1, RoundNo: 0 }, validation: { required: true } },
              GameDate: { type: "date", required: true },
              Season: { type: "number" },
              Grade: { defaultValue: { GradeID: 1 }, validation: { required: true } },
              Ground: { defaultValue: { GroundID: 1 }, validation: { required: true } },
              HomeTeam: { defaultValue: { TeamID: 1 }, validation: { required: true } },
              AwayTeam: { defaultValue: { TeamID: 1 }, validation: { required: true } },
              ScoreFor: { type: "number", validation: { min: 0, required: true } },
              ScoreAgainst: { type: "number", validation: { min: 0, required: true } },
              IsPlayed: { type: "boolean", defaultValue: true }
            }
          }
        },
        data: [{"GameID":1,"Grade":{"GradeID":1,"GradeName":"A Grade"},"GameType":{"GameTypeID":1,"Description":"Regular Season","RoundNo":1,"Round":"Round 1"},"Season":2015,"GameDate":"\/Date(1432702800000)\/","Ground":{"GroundID":1,"GroundName":"Main Oval, Mainland"},"HomeTeam":{"TeamID":1,"TeamName":"A Team"},"AwayTeam":{"TeamID":2,"TeamName":"Losers R Us"},"ScoreFor":10,"ScoreAgainst":0,"IsPlayed":true,"ErrorMessage":null},
               {"GameID":2,"Grade":{"GradeID":2,"GradeName":"B Grade"},"GameType":{"GameTypeID":1,"Description":"Regular Season","RoundNo":2,"Round":"Round 2"},"Season":2015,"GameDate":"\/Date(1432659159000)\/","Ground":{"GroundID":2,"GroundName":"Happy Park, Happyland"},"HomeTeam":{"TeamID":3,"TeamName":"B Team"},"AwayTeam":{"TeamID":2,"TeamName":"Losers R Us"},"ScoreFor":55,"ScoreAgainst":0,"IsPlayed":true,"ErrorMessage":null}]}
    });
  });
</script>

我也试过不成功:

GameType: [{ RoundNo: { type: "number", defaultvalue: 0, validation: { required: true } } }, { GameTypeID: { defaultValue: 1, validation: { required: true } } }],

如果您在数据集中将 RoundNo 值设置为字符串,则过滤工作正常。

  $(document).ready(function () {
    $("#tblGames").kendoGrid({
      sortable: true,
      groupable: true,
      filterable: true,
      columns: [
        { field: "Season", title: "Season", type: "number", filterable: { multi: true }, width: 100 },
        { field: "GameType.RoundNo", title: "Round", type: "number", filterable: { multi: true }, width: 90 },
        { field: "GameDate", title: "Date", type: "date", format: "{0:dd/MMM hh:mmtt}", width: 130 },
        { field: "Grade.GradeName", title: "Grade", filterable: { multi: true } },
        { field: "HomeTeam.TeamName", title: "Home", filterable: { multi: true } },
        { field: "AwayTeam.TeamName", title: "Away", filterable: { multi: true } },
        { title: "Score", template: "#= ScoreFor + ' - ' + ScoreAgainst #", width: 70, filterable: false },
        { field: "IsPlayed", title: "Played?", filterable: { multi: true }, width: 95 }
      ],
      dataSource: { 
        schema: {
          model: {
            id: "GameID",
            fields: {
              GameID: { editable: false, defaultValue: 0 },
              GameType: { defaultValue: { GameTypeID: 1, RoundNo: 0 }, validation: { required: true } },
              //GameType: [{ RoundNo: { type: "number", defaultvalue: 0, validation: { required: true } } }, { GameTypeID: { defaultValue: 1, validation: { required: true } } }],
              GameDate: { type: "date", required: true },
              Season: { type: "number" },
              Grade: { defaultValue: { GradeID: 1 }, validation: { required: true } },
              Ground: { defaultValue: { GroundID: 1 }, validation: { required: true } },
              HomeTeam: { defaultValue: { TeamID: 1 }, validation: { required: true } },
              AwayTeam: { defaultValue: { TeamID: 1 }, validation: { required: true } },
              ScoreFor: { type: "number", validation: { min: 0, required: true } },
              ScoreAgainst: { type: "number", validation: { min: 0, required: true } },
              IsPlayed: { type: "boolean", defaultValue: true }
            }
          }
        },
        data: [{"GameID":1,"Grade":{"GradeID":1,"GradeName":"A Grade"},"GameType":{"GameTypeID":1,"Description":"Regular Season","RoundNo":"1","Round":"Round 1"},"Season":2015,"GameDate":"\/Date(1432702800000)\/","Ground":{"GroundID":1,"GroundName":"Main Oval, Mainland"},"HomeTeam":{"TeamID":1,"TeamName":"A Team"},"AwayTeam":{"TeamID":2,"TeamName":"Losers R Us"},"ScoreFor":10,"ScoreAgainst":0,"IsPlayed":true,"ErrorMessage":null},
               {"GameID":2,"Grade":{"GradeID":2,"GradeName":"B Grade"},"GameType":{"GameTypeID":1,"Description":"Regular Season","RoundNo":"2","Round":"Round 2"},"Season":2015,"GameDate":"\/Date(1432659159000)\/","Ground":{"GroundID":2,"GroundName":"Happy Park, Happyland"},"HomeTeam":{"TeamID":3,"TeamName":"B Team"},"AwayTeam":{"TeamID":2,"TeamName":"Losers R Us"},"ScoreFor":55,"ScoreAgainst":0,"IsPlayed":true,"ErrorMessage":null}]}
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>

<head>
  <base href="http://demos.telerik.com/kendo-ui/grid/index">
  <style>
    html {
      font-size: 12px;
      font-family: Arial, Helvetica, sans-serif;
    }
  </style>
  <title></title>
  <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.common-material.min.css" />
  <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.material.min.css" />
  <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.dataviz.min.css" />
  <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.dataviz.material.min.css" />

  <script src="http://cdn.kendostatic.com/2015.1.429/js/jquery.min.js"></script>
  <script src="http://cdn.kendostatic.com/2015.1.429/js/kendo.all.min.js"></script>
</head>

<body>

  <div id="example">
    <div id="tblGames"></div>
  </div>


</body>

</html>