Kendo UI开发教程(21): Kendo MVVM 数据绑定(十) Source

jerry Kendo UI 2015年11月25日 收藏

Contents

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>

20130819001

如果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>