You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kendo模板传变量至JS函数设图标遇加载异常,求可行方案

在Kendo模板中动态设置图标Class的正确姿势及替代方案

你遇到的无限加载问题,根源在于Kendo模板的表达式嵌套错误——你在#=输出表达式里又套了一层#=,这会让模板解析器陷入混乱,进而引发加载异常。咱们一步步来解决:

一、修复当前写法的错误

你原来的写法#=addFileExtensionIcon(#=DocType#)#是不对的,Kendo模板中,#=已经是用来输出表达式结果的标记,内部传递变量时直接写变量名即可,不需要再用#=包裹。

正确的模板代码

@*//WF ITEM ATTACHMENTS TEMPLATE*@
<script id="itemAttachmentsTemplate" type="text/x-kendo-template">
 <div class="attachment">
 <span class='k-icon #=addFileExtensionIcon(DocType)#'></span>
 <h3>FILE NAME</h3>
 <h3>#=DocType#</h3>
 <h3>#=CreatedByUserName#</h3>
 <div class="btn btn-link">
 <span class="k-icon k-i-download"></span>
 </div>
 </div>
</script>

额外注意:函数返回值的格式

另外要检查你的addFileExtensionIcon函数——返回的类名前面带了.,但Kendo的图标类本身是不带点的(比如k-i-image而非.k-i-image),这样会导致最终class变成k-icon .k-i-image,浏览器无法正确识别样式。建议修改函数返回值:

function addFileExtensionIcon(extension) {
 switch (extension) {
 case '.jpg':
 case '.img':
 case '.png':
 case '.gif':
 return "k-i-image"; // 去掉前面的.
 case '.doc':
 case '.docx':
 return "k-i-file-doc";
 case '.xls':
 case '.xlsx':
 return "k-i-file-xls";
 case '.pdf':
 return "k-i-file-pdf";
 case '.zip':
 case '.rar':
 return "k-i-file-zip";
 default:
 return "k-i-file";
 }
}

二、替代方案

如果不想在模板里直接调用函数,还有两种常用的思路:

方案1:预处理数据源,提前计算图标类

在绑定数据前,给每个数据项添加一个iconClass字段,把图标类提前计算好,模板直接使用即可:

// 假设你的原始数据源是dataList
const processedData = dataList.map(item => {
  return {
    ...item,
    iconClass: addFileExtensionIcon(item.DocType)
  };
});

// 绑定组件时使用处理后的数据源
$("#attachmentListView").kendoListView({
  dataSource: processedData,
  template: $("#itemAttachmentsTemplate").html()
});

对应的模板简化为:

<span class='k-icon #=iconClass#'></span>

这种方式把逻辑从模板中剥离,让模板更简洁,适合数据量不大的场景。

方案2:在模板中用代码块定义变量

可以用#包裹代码块,先计算出图标类,再在后续输出中使用:

<script id="itemAttachmentsTemplate" type="text/x-kendo-template">
 <div class="attachment">
 # 先计算图标类,存在变量里 #
 # var iconClass = addFileExtensionIcon(DocType); #
 <span class='k-icon #=iconClass#'></span>
 <h3>FILE NAME</h3>
 <h3>#=DocType#</h3>
 <h3>#=CreatedByUserName#</h3>
 <div class="btn btn-link">
 <span class="k-icon k-i-download"></span>
 </div>
 </div>
</script>

这种方式适合需要在模板内做更多逻辑处理的场景,可读性更强。

内容的提问来源于stack exchange,提问作者Ray Koren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:27:55