2017-09-22 3 views
0

나는 Kendo Grid를 사용하여 JSON 객체에 동적으로 바인딩합니다. 기능, 나는 getKendoColor 함수를 호출 할 generateColumns에서Kendo UI Grid - 열 템플릿의 호출 기능

. 그러나, 난 열 셀 값을 전달해야합니다. 아래 코드에서 'RED'가 어떻게 작동하는지 보여 주도록 강요했습니다.

이 getKendoColor 함수에 어떻게 열 값을 전달합니까? 그런 다음

function getColumnTemplate(dataItem) { 
    var OverallStatus = dataItem.OverallStatus.toUpperCase(); 

    //All the rest of your getKendoColor function 
    return someHTML; 
} 

:

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"/> 
 
    <title>Kendo UI Snippet</title> 
 

 
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.3.913/styles/kendo.common.min.css"/> 
 
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.3.913/styles/kendo.rtl.min.css"/> 
 
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.3.913/styles/kendo.silver.min.css"/> 
 
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2017.3.913/styles/kendo.mobile.all.min.css"/> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" /> 
 
                            
 
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
    <script src="https://kendo.cdn.telerik.com/2017.3.913/js/kendo.all.min.js"></script> 
 
</head> 
 
<body> 
 
    
 

 
    <div id="grid" style="width:1000px;"></div> 
 

 
    <script> 
 
     var isDateField =[]; 
 
     var isTaskField =[]; 
 
     
 
     $.ajax({ 
 
     url: "http://www.mocky.io/v2/59c4dd1e4000005400b25ba7", 
 
     dataType: "jsonp", 
 
     success: function(result) { 
 
      generateGrid(result); 
 
     } 
 
     }); 
 

 
     function generateGrid(response) { 
 
     var model = generateModel(response); 
 
     var columns = generateColumns(response); 
 

 
     var grid = $("#grid").kendoGrid({ 
 
      dataSource: { 
 
      transport:{ 
 
       read: function(options){ 
 
       options.success(response.Table); 
 
       } 
 
      }, 
 
      pageSize: 5, 
 
      schema: { 
 
       model: model 
 
      } 
 
      }, 
 
      columns: columns, 
 
      pageable: true, 
 
      editable:false 
 
     }); 
 
     } 
 

 
\t \t \t function generateColumns(response) { 
 
      var columnNames = response["columns"]; 
 
      return columnNames.map(function (name) { 
 
       if (isTaskField[name]) { 
 
        return { field: name, template: '#= getKendoColor("RED") #', format: (isDateField[name] ? "{0:D}" : "") }; 
 
       } 
 
       else 
 
        return { field: name, format: (isDateField[name] ? "{0:D}" : "") }; 
 
      }) 
 
     } 
 
     
 

 
     function generateModel(response) { 
 

 
     var sampleDataItem = response["Table"][0]; 
 

 
     var model = {}; 
 
     var fields = {}; 
 
     for (var property in sampleDataItem) { 
 
      var itemValue = sampleDataItem[property]; 
 

 
      if (property.indexOf("ID") !== -1) { 
 
      model["id"] = property; 
 
      } 
 
      var propType = typeof sampleDataItem[property]; 
 

 
      if (propType === "number") { 
 
      fields[property] = { 
 
       type: "number", 
 
       validation: { 
 
       required: true 
 
       } 
 
      }; 
 
      if (model.id === property) { 
 
       fields[property].editable = false; 
 
       fields[property].validation.required = false; 
 
      } 
 
      } else if (propType === "boolean") { 
 
      fields[property] = { 
 
       type: "boolean" 
 
      }; 
 
      } else if (propType === "string") { 
 
      var parsedDate = kendo.parseDate(sampleDataItem[property]); 
 
      if (parsedDate) { 
 
       fields[property] = { 
 
       type: "date", 
 
       validation: { 
 
        required: true 
 
       } 
 
       }; 
 
       isDateField[property] = true; 
 
      } else { 
 
       fields[property] = { 
 
       validation: { 
 
        required: true 
 
       } 
 
       }; 
 
       if ((property !== "Entity") && (property !== "Period") && (property !== "Level")) 
 
       { 
 
       isTaskField[property] = true; 
 
       } 
 
      } 
 
      } else { 
 
      fields[property] = { 
 
       validation: { 
 
       required: true 
 
       } 
 
      }; 
 
      } 
 
     } 
 

 
     model.fields = fields; 
 

 
     return model; 
 
     } 
 
     
 
     function getKendoColor(OverallStatus) { 
 

 
     OverallStatus = OverallStatus.toUpperCase(); 
 
     //alert(OverallStatus); 
 

 
     var htmlRed = kendo.format('<div class="text-center"><div style="color:red"> <i class="fa fa-circle fa-lg"></i> </div> </div>'); 
 
     var htmlGreen = kendo.format('<div class="text-center"><div style="color:green"> <i class="fa fa-circle fa-lg"></i> </div> </div>'); 
 
     var htmlOrange = kendo.format('<div class="text-center"><div style="color:orange"> <i class="fa fa-circle fa-lg"></i> </div> </div>'); 
 
     var htmlYellow = kendo.format('<div class="text-center"><div style="color:yellow"> <i class="fa fa-circle fa-lg"></i> </div> </div>'); 
 

 
     switch (OverallStatus) { 
 
      case "RED": 
 
      return htmlRed; 
 
      case "GREEN": 
 
      return htmlGreen; 
 
      case "ORANGE": 
 
      return htmlOrange; 
 
      case "YELLOW": 
 
      return htmlYellow; 
 
      case "CREATED": 
 
      return htmlRed; 
 
      case "APPROVED": 
 
      return htmlGreen; 
 
          } 
 
     }  
 
    </script> 
 
</body> 
 
</html>

https://dojo.telerik.com/AgALaK/2

답변

1

당신은 함수로하고 경우에 템플릿 자체를 설정할 수 있습니다 getKendoColor에 약간의 변화가 트릭을 할 것입니다 이 함수를 템플릿으로 사용하십시오.

return columnNames.map(function (name) { 
        if (isTaskField[name]) { 

         return { field: name, template: getColumnTemplate, format: (isDateField[name] ? "{0:D}" : "") }; 
        } 
        else 
         return { field: name, format: (isDateField[name] ? "{0:D}" : "") }; 
       }) 
+0

어떻게 수행 할 수 있습니까? – Kevin

+0

그냥 내 대답을 편집했습니다. – JFlox

+0

"RED"를 함수에 전달하는 대신 죄송합니다. 셀 값을 전달하고 싶습니다. 그것이 나의 유일한 문제입니다. – Kevin