2

我需要在 Kendo Grid 模板中动态访问列名。

代码:

    $("#grid").kendoGrid({
  dataSource: [
     { Quantity: 2 , Amount: 650},
    { Quantity: 0, Amount: 0 },
    { Quantity: 1, Amount: 500 },   
    { Quantity: 4, Amount: 1047 }
  ],
  sortable: true,
  columns: [
    {
      field: "Quantity",
      template: function (dataItem) {
          if (dataItem.Quantity == '0') {
            return "--";
          } else {
            return dataItem.Quantity;
          }
        }
    },

    {
      field: "Amount",
      template: function (dataItem) {
          if (dataItem.Amount == '0') {
            return "--";
          } else {
            return dataItem.Amount;
          }
        }
    }
  ]
});

在“列-> 模板”内部,我需要通过变量访问列,而不是对其进行硬编码。我怎样才能做到这一点?因为在现实生活中,我将动态列填充到 dataSource 中,并且我将在 for 循环内构造列数组。请帮忙。

请访问此 JSBIN:http: //jsbin.com/egoneWe/1/edit

4

1 回答 1

4

据我了解,您columns使用以下内容构建数组:

var Definition = [
    { field: "Quantity" },
    { field: "Amount" }
];

var columns = [];
$.each(Definition, function (idx, item) {
    columns.push({
        field   : item.field,
        template: function (dataItem) {
            ...;
        }
    })
});

$("#grid").kendoGrid({
    dataSource: data,
    sortable  : true,
    columns   : columns
});

对?问题是您想对多个(所有)列使用相同的模板函数,而不必重写许多列。

如果是这样,您可以做的是:

var Definition = [
    { field: "Quantity" },
    { field: "Amount" }
];
var columns = [];
$.each(Definition, function (idx, item) {
    columns.push({
        field   : item.field,
        template: function (dataItem) {
            return commonTemplateFunction(dataItem, item.field);
        }
    })
});

我在columns数组中使用的(网格的列定义)是一个接收两个参数的函数:dataItem行和field正在编辑的名称。

然后,我将template函数定义为:

function commonTemplateFunction(dataItem, field) {
    if (dataItem[field] == '0') {
        return "--";
    } else {
        return dataItem[field];
    }
}

你修改的代码在这里:http: //jsbin.com/egoneWe/3/edit

因此,尽管我无法猜出列名,但我可以使用列启动器来解决问题。

于 2013-09-27T22:30:24.253 回答