将计算数据存储在剑道网格的列中

Store calculated data in Column of Kendo Grid

本文关键字:网格 计算 数据 存储      更新时间:2023-09-26

我要做的是将一些数据存储在特定列中,该列是使用另一列中的数据计算的。

我目前有一个函数,该函数以 JSON 为单位返回给定Id的可用许可证数量

function getAvailableLicenses(id) {
    var url = "/Host/Organization/AvailableLicenses/" + id;
    $.get(url, function (data) {
        return data.AvailableLicenses;
    });
}

如何将此号码存储在名为"可用许可证"的列中?

这是我目前的网格:

$("#OrganizationGrid").kendoGrid({
dataSource: viewModel.get("orgDataSource"),
filterable: {
    extra: false
},
sortable: true,
pageable: true,
columns: [
    { field: "Id", hidden: true },
    { field: "Name", template: "<a href='/Host/Organization/Detail/#:Id#'>#:Name#</a>" },
    { field: "LicenseNumber", title: "Number of Licenses" },
    { field: null, title: "Available Licenses", template: "#= getAvailableLicenses(Id) #" },
    { field: "LicenseExpiration", title: "License Expiration", format: "{0:MM/dd/yyyy}" },
    { field: "State" },
    { field: "Active" }
],
editable: false
});

如您所见,我尝试使用一个模板创建一个空列,该模板为给定Id调用函数。通过使用 Fiddler,我可以看到确实为所有行调用了该函数,但AvailableLicenses列只显示每一行的Undefined

我在这里缺少什么来让它工作吗?

我认为更好的方法是在数据源parse()函数上

首先:您的列配置必须像这样更改:

 { field: "AvalableLicenses", title: "Available Licenses" },

你可以使用你的模板.

其次,在您的dataSource()中,您可以添加:

schema: {
    parse: function(response) {
      for (var i = 0; i < response.length; i++) {
       response[i].AvalableLicenses= null;
       response[i].AvalableLicenses = getAvailableLicenses(response[i].Id)
      }
      return response;
    }
  }

编辑:

如果您更喜欢使用您的方式,我认为您的配置没有任何问题,可能是您的$.get返回未定义,或者您不希望返回的内容。为了方便起见,我做了一个例子。

http://jsfiddle.net/jwocf897/

希望这个帮助