Kendogrid列通用模板

时间:2016-03-09 17:05:15

标签: javascript angularjs kendo-ui kendo-grid telerik-grid

我有一个案例,其中Kendo网格列是动态的

我有两个休息api,它给我一个关于列的元数据

metadata = [{title1, field1}, {title2, field2}...]

我需要为某些列应用通用模板

我正在迭代元数据并构建列数组

forEach(col in metadata){
 if(title === 'Name'){
     columns.push({
                    title: col.title,
                    template: nameTemplate
                });
 }
 if(title === 'Date'){
     columns.push({
                    title: col.title,
                    template: dateTemplate
                });
 }
 if(title === 'Salary'){
     columns.push({
                    title: col.title,
                    template: currencyTemplate
                });
 }
 else{
   columns.push({
                    title: col.title,
                    field: col.field
                });
  }
}

function dateTemplate(dataItem) {            
 if(date){
     return kendo.toString(kendo.parseDate(dataItem.date, 'yyyy-MM-dd'), 'MM/dd/yyyy');
 }            
 return '';
}

在datetemplate中,我获取dataItem并绑定日期字段。

有没有办法可以将模板用于多个列 例如,如果我的网格中有多个日期列,例如 开始日期,结束日期,加入日期,出生日期

如果我选择通过将fieldName传递给模板函数为所有列应用单个模板,如下所示

我试过这种方式,但这不起作用。

1. format : "{0:MM/dd/yyyy}" //this doesn't work and may be because date is returned as a string in json.

2. if(col.title.indexOf('Date')>0){ //check if title is of date type
     columns.push({
                    title: col.title,
                    template: dateTemplate(fieldName) //pass fieldname
                });
 }

I also tried

3. if(col.title.indexOf('Date')>0){ //check if title is of date type
     columns.push({
                    title: col.title,
                    template: function(dataItem) { dateTemplate(dataItem, fieldName) } //pass fieldname
                });
 }

function dateTemplate(dataItem, field){
  return kendo.toString(kendo.parseDate(dataItem[field], 'yyyy-MM-dd'), 'MM/dd/yyyy');
}

这始终将所有列与所有行绑定在同一日期。

请帮我在kendogrid中使用这个genericTemplating

1 个答案:

答案 0 :(得分:1)

您可以使用模板字符串而不是函数:

"#= kendo.toString(kendo.parseDate(" + field + ", 'yyyy-MM-dd'), 'MM/dd/yyyy') #"

以下是一些示例代码和演示:

  var metadata = [
    {
      field: "StartDate",
      title: "Start Date",
    }, 
    {
      field: "EndDate",
      title: "Emd Date",
    }
  ];

  var columns = [];
  for (var i = 0; i < metadata.length; i++){
    var col = metadata[i];
    if(col.title.indexOf('Date')>0){ 
       columns.push(
         {
           field: col.field,
           title: col.title,
           template: dateTemplate(col.field)
         });
    }    
  }


function dateTemplate(field){
  return "#= kendo.toString(kendo.parseDate(" + field + ", 'yyyy-MM-dd'), 'MM/dd/yyyy') #";
}

DEMO