2014-09-19 90 views
0

我想用一組列的客戶端模板來設置一個Kendo MVC網格。 我有這個和它的工作:kendo客戶端模板的參數

columns.Bound(m => m.FC_Sun).ClientTemplate("# if(FC_Sun != Base_Sun) {#" + "<span style='color:red;'>#:FC_Sun # </span>" + "# } else {#" + "#: FC_Sun #" + "# } #"); 

但是我想這個移動到客戶端模板,而不是因爲我需要添加相當多的更多的項目列和內聯模板只是似乎有點「笨重」。

問題是,我該如何使用單個客戶端模板來做到這一點。我有一個適用於特定列的現有列(與上面相同)。

<script id="columnTemplate" type="text/kendo-tmpl"> 
    #if(FC_Sun != Base_Sun){# 
<span style='color:orange'>#:FC_Sun #</span> 
    #}else{# 
<span>#: FC_Sun #</span> 
    #}# 
</script> 

正如你可以看到這是非常依賴於一列,做這種方式,我需要創造7個模板,一個星期,這似乎只是矯枉過正的每一天。 那麼有沒有辦法將額外的參數傳遞給模板,告訴它在if語句中使用哪些值..?

回答

2

事實證明,有一種方法將參數傳遞給模板,在網格:

"#=customColumnTemplate($.extend({}, data, { field: 'FC_Sun' }))#" 

而且模板:

<script id="columnTemplate" type="text/kendo-tmpl"> 
    <p>#= data[field] #</p> 
</script> 
<script> 
    var customColumnTemplate = kendo.template($('#columnTemplate').html()); 
</script> 

其實我到底做了它的方式儘管是跳過外部模板並直接使用功能:

"#=customColumnTemplate(data, 'FC_Sun', 'Base_Sun')#" 

function customColumnTemplate(data, field, baseField) {   
    var fc = data[field]; 
    var fcBase = data[baseField]; 

    if (fc != fcBase) { 
    return "<span style='color:red;'/>" + fc + "</span>"; 
    } 

    return fc; 
} 
0

不幸的是,沒有辦法將參數直接傳遞給Kendo模板。但是,你可以嘗試使用在你的模板switch statement,並添加枚舉(或任何會工作),以模型爲切換鍵:

<script id="columnTemplate" type="text/kendo-tmpl"> 
    # switch (DayofWeek) { 
     case "Sunday": # 
     <span style='color:orange;'>#:FC_Sun #</span> 
     # break; # 
    # case "Monday": # 
     <span style='color:red;'>#:FC_Mon #</span> 
     # break; # 
    ... 
    # } # 
</script> 

這應該允許您通過模式「傳遞參數」,並控制每個模型實例的模板外觀。

希望這會有所幫助。