Source绑定可以把ViewModel的值和由Kendo模板定义的目标元素绑定,如果ViewModel的值发生变化,被绑定的目标元素也随之发生变化。

模板由属性data-template指定,它的值为某个script定义的模板的id.如果没有指明模板,则根据元素的标记使用缺省的模版。

Source绑定到数组

当ViewModel的值 为一数组时,那么通过Source绑定到模板时,会把数组中每个元素逐个应用到模板,最后的输出为应用这些模板的结果的综合。 添加删除数组中的内容,显示的内容也随之变化。

注:绑定到ViewModel数组时,Source指明的为单个跟元素名称,例如:




​1​

​<​​​​ul​​ ​​data-template​​​​=​​​​"ul-template"​​ ​​data-bind​​​​=​​​​"source: products"​​​​>​


​2​

​</​​​​ul​​​​>​


​3​

​<​​​​script​​ ​​id​​​​=​​​​"ul-template"​​ ​​type​​​​=​​​​"text/x-kendo-template"​​​​>​


​4​

​<​​​​li​​​​>​


​5​

​id: <​​​​span​​ ​​data-bind​​​​=​​​​"text: id"​​​​></​​​​span​​​​>​


​6​

​name: <​​​​span​​ ​​data-bind​​​​=​​​​"text: name"​​​​></​​​​span​​​​>​


​7​

​</​​​​li​​​​>​


​8​

​</​​​​script​​​​>​


​9​

​<​​​​script​​​​>​


​10​

​var viewModel = kendo.observable({​


​11​

​products: [​


​12​

​{ id: 1, name: "Coffee" },​


​13​

​{ id: 2, name: "Tea" },​


​14​

​{ id: 3, name: "Juice" }​


​15​

​]​


​16​

​});​


​17​

 


​18​

​kendo.bind($("ul"), viewModel);​


​19​

​</​​​​script​​​​>​

这个例子会输出三个li元素–每个对应到products数组中一个元素,下面为输出的HTML内容:




​1​

​<​​​​ul​​​​>​


​2​

​<​​​​li​​​​>​


​3​

​id: <​​​​span​​​​>1</​​​​span​​​​>​


​4​

​name: <​​​​span​​​​>Coffee</​​​​span​​​​>​


​5​

​</​​​​li​​​​>​


​6​

​<​​​​li​​​​>​


​7​

​id: <​​​​span​​​​>2</​​​​span​​​​>​


​8​

​name: <​​​​span​​​​>Tea</​​​​span​​​​>​


​9​

​</​​​​li​​​​>​


​10​

​<​​​​li​​​​>​


​11​

​id: <​​​​span​​​​>3</​​​​span​​​​>​


​12​

​name: <​​​​span​​​​>Juice</​​​​span​​​​>​


​13​

​</​​​​li​​​​>​


​14​

​</​​​​ul​​​​>​

​​

如果ViewModel绑定的数组的内容为简单类型(如数字,字符串,日期),这时在模板中需要使用”this”关键字来引用当前数组项:




​1​

​<​​​​ul​​ ​​data-template​​​​=​​​​"ul-template"​​ ​​data-bind​​​​=​​​​"source: products"​​​​>​


​2​

​</​​​​ul​​​​>​


​3​

​<​​​​script​​ ​​id​​​​=​​​​"ul-template"​​ ​​type​​​​=​​​​"text/x-kendo-template"​​​​>​


​4​

​<​​​​li​​ ​​data-bind​​​​=​​​​"text: this"​​​​></​​​​li​​​​>​


​5​

​</​​​​script​​​​>​


​6​

​<​​​​script​​​​>​


​7​

​var viewModel = kendo.observable({​


​8​

​products: [ "Coffee", "Tea", "Juice" ]​


​9​

​});​


​10​

 


​11​

​kendo.bind($("ul"), viewModel);​


​12​

​</​​​​script​​​​>​

输出内容如下:




​1​

​<​​​​ul​​​​>​


​2​

​<​​​​li​​​​>Coffee</​​​​li​​​​>​


​3​

​<​​​​li​​​​>Tea</​​​​li​​​​>​


​4​

​<​​​​li​​​​>Juice</​​​​li​​​​>​


​5​

​</​​​​ul​​​​>​

Source绑定到非数组

source绑定也支持绑定到非数组值,此时在模板中引用到ViewModel的某个属性,最终的结果为模板使用ViewModel后的结果。




​1​

​<​​​​div​​ ​​data-template​​​​=​​​​"div-template"​​ ​​data-bind​​​​=​​​​"source: person"​​​​>​


​2​

​<​​​​script​​ ​​id​​​​=​​​​"div-template"​​ ​​type​​​​=​​​​"text/x-kendo-template"​​​​>​


​3​

​Name: <​​​​span​​ ​​data-bind​​​​=​​​​"text: name"​​​​></​​​​span​​​​>​


​4​

​</​​​​script​​​​>​


​5​

​</​​​​div​​​​>​


​6​

​<​​​​script​​​​>​


​7​

​var viewModel = kendo.observable({​


​8​

​person: {​


​9​

​name: "John Doe"​


​10​

​}​


​11​

​});​


​12​

 


​13​

​kendo.bind($("div"), viewModel);​


​14​

​</​​​​script​​​​>​

输出:




​1​

​<​​​​div​​​​>​


​2​

​Name: <​​​​span​​​​>John Doe</​​​​span​​​​>​


​3​

​</​​​​div​​​​>​

你也可以直接绑定到ViewModel对象本身,此时可以使用把source 的值设置为“this”,例如:




​1​

​<​​​​div​​ ​​data-template​​​​=​​​​"div-template"​​ ​​data-bind​​​​=​​​​"source: this"​​​​>​


​2​

​<​​​​script​​ ​​id​​​​=​​​​"div-template"​​ ​​type​​​​=​​​​"text/x-kendo-template"​​​​>​


​3​

​Name: <​​​​span​​ ​​data-bind​​​​=​​​​"text: name"​​​​></​​​​span​​​​>​


​4​

​</​​​​script​​​​>​


​5​

​</​​​​div​​​​>​


​6​

​<​​​​script​​​​>​


​7​

​var viewModel = kendo.observable({​


​8​

​name: "John Doe"​


​9​

​});​


​10​

 


​11​

​kendo.bind($("div"), viewModel);​


​12​

​</​​​​script​​​​>​

结果如下:




​1​

​<​​​​div​​​​>​


​2​

​Name: <​​​​span​​​​>John Doe</​​​​span​​​​>​


​3​

​</​​​​div​​​​>​

Source绑定Select元素

当数组绑定到select元素时,就创建多个option元素。




​1​

​<​​​​select​​ ​​data-bind​​​​=​​​​"source: colors"​​​​></​​​​select​​​​>​


​2​

​<​​​​script​​​​>​


​3​

​var viewModel = kendo.observable({​


​4​

​colors: [ "Red", "Green", "Blue" ]​


​5​

​});​


​6​

 


​7​

​kendo.bind($("select"), viewModel);​


​8​

​</​​​​script​​​​>​

输出的HTML元素如下:




​1​

​<​​​​select​​​​>​


​2​

​<​​​​option​​​​>Red</​​​​option​​​​>​


​3​

​<​​​​option​​​​>Green</​​​​option​​​​>​


​4​

​<​​​​option​​​​>Blue</​​​​option​​​​>​


​5​

​</​​​​select​​​​>​

select元素也可以绑定到JavaScript对象数组(非简单类型),此时可以同时指定data-text-field,data-value-field 用来指定option元素的value和text属性,例如:




​1​

​<​​​​select​​ ​​data-text-field​​​​=​​​​"name"​​ ​​data-value-field​​​​=​​​​"id"​


​2​

​data-bind​​​​=​​​​"source: products"​​​​></​​​​select​​​​>​


​3​

​<​​​​script​​​​>​


​4​

​var viewModel = kendo.observable({​


​5​

​products: [​


​6​

​{ id: 1, name: "Coffee" },​


​7​

​{ id: 2, name: "Tea" },​


​8​

​{ id: 3, name: "Juice" }​


​9​

​]​


​10​

​});​


​11​

 


​12​

​kendo.bind($("select"), viewModel);​


​13​

​</​​​​script​​​​>​

输出如下:




​1​

​<​​​​select​​​​>​


​2​

​<​​​​option​​ ​​value​​​​=​​​​"1"​​​​>Coffee</​​​​option​​​​>​


​3​

​<​​​​option​​ ​​value​​​​=​​​​"2"​​​​>Tea</​​​​option​​​​>​


​4​

​<​​​​option​​ ​​value​​​​=​​​​"3"​​​​>Juice</​​​​option​​​​>​


​5​

​</​​​​select​​​​>​