基本用法

KendoUI模板引擎融合了包含"#号语法"(Hash Syntax, e.g. #= javascript property #) 的HTML和JS对象/数组,产生新的包含关联数据值的HTML。如:

//take the HTML
<div>#= name #</div>//and merge it with JS Object
{name:"Neo"}//to produce
<div>Neo</div>

kendo.template()的作用是把模板字符串编译为构建新HTML的函数,如实现上述过程:

var myTemplate = kendo.template("<div>#= name #</div>");
var newHTML = myTemplate({name:"Neo"});
console.log(newHTML); //<div>Neo</div>

kendo.template()还有第二个可选参数,是一个JS对象,用来配置模板本身。


与组件配合使用

模板引擎可以像上面的示例那样独立使用,也可以作为组件的配置项使用,如:

$("#auInput").kendoAutoComplete({dataSource: [{id:1, name:"Neo"},{id:2, name:"Shelly"}],dataTextField: "name",template: kendo.template("<span><img src='img/users/#= id #.jpg' /> #= name #</span>")
});

使用数组类型数据

一旦编译好模板,就可以传递给它JS对象或数组类型的数据,然后生成新的HTML。当传递的数据类型为数组时,可以使用默认的"data"属性来访问该数组。例如下面示例中的表达式data.lengthdata[i] 就用来访问数组数据。

<script type="text/x-kendo-template" id="myTemplate"><ul># for(var i=0;i<data.length;i++) { #<li>#= data[i] #</li># } #</ul>
</script><script type="text/javascript">$(function() {var myTemplate = kendo.template($("#myTemplate").html());var newHTML = myTemplate(["Neo", "Shelly", "Will"]);console.log(newHTML);/* <ul><li>Neo</li><li>Shelly</li><li>Will</li></ul>*/});
</script>

对#号进行转义

当模板字符串中出现#号时,可以使用双反斜杠进行转义,如:

kendo.template("<a href='\#'>link</a>");

当#号出现在<script>标签内时,使用单反斜杠进行转义,如:

<script type="text/x-kendo-template" id="myTemplate"><a href="#">link</a>
</script><script>var myTemplate = kendo.template($("#myTemplate").html());console.log(myTemplate({}));
</script>