概述

Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的。它可以监控改变( UI 变化或是值的变化)并通知关心该变化的组件。 本篇以下 ViewModel 和  ObservableObject 代表同一对象。

为了创建一个 ObservableObject 对象,可以通过创建一个新 kendo.data.ObservableObject 实例或是使用 kendo.observable 方法,这两种方法效果相同。

例如:

var viewModel1 = new kendo.data.ObservableObject( {
field1: "value1",
field2: "value2"
}); var viewModel2 = kendo.observable( {
field1: "value1",
field2: "value2"
});

kendo.bind 方法内部实现时自动将给定的 ViewModel 对象转换为一个 ObservableObject 对象,除非传入的参数类型已经是一个 ObservableObject 对象。

注:如果某个 ViewModel 对象在初始后以后还会使用到(在调用 kendo.bind 之前或之后),则必须使用 kendo.observable 方法或是 new kendo.data.ObservableObject 来创建一个 ViewModel 对象。比如:

var viewModel = kendo.observable({
name: "John Doe"
}); viewModel.set("name", "Jane Doe"); // use the View-Model object after initialization

如果 ViewModel 对象在初始化后不再访问这个对象,那么你可以使用普通 的JavaScript 对象,此时 kendo.bind 方法不会把原始的 ViewMode 对象转化为 kendo.data.ObservableObject. 例如,下面的代码出错:

var viewModel = {
name: "John Doe"
}; kendo.bind(document.body, viewModel); /*
The following statement will fail because the View-Model
is not an instance of kendo.data.ObservableObject.
*/
viewModel.set("name", "Jane Doe");

因此强烈建议总是使用 kendo.observable 来初始化一个 ViewModel 对象。

读取 ObservableObject

使用 get 方法来读取 ObservableObject 对象的属性。例如:

var viewModel = kendo.observable({
name: "John Doe"
}); var name = viewModel.get("name");
alert(name); // shows "John Doe"

get 也支持读取嵌套的属性,例如:

var viewModel = kendo.observable({
person: {
name: "John Doe"
}
});
var personName = viewModel.get("person.name");
alert(personName); // shows "John Doe"

设置 ObservableObject 属性

使用 set 方法来设置 ObservableObject 属性,例如:

var viewModel = kendo.observable({
name: "John Doe"
}); viewModel.set("name", "Jane Doe"); //set the "name" field to "Jane Doe" var name = viewModel.get("name");
alert(name); // shows "Jane Doe"

同样,set 也支持设置嵌套的属性,例如:

var viewModel = kendo.observable({
person: {
name: "John Doe"
}
}); viewModel.set("person.name", "Jane Doe"); var personName = viewModel.get("person.name");
alert(personName); // shows "Jane Doe"

创建关联属性(或者成为计算后属性) 在应用中常常需要把某个 ViewModel 的属性重新格式成适合 View 显示的形式,在这种情况可以通过创建一个新的关联属性来实现,比如:

<span data-bind="text: fullName"></span>
<script>
var viewModel = kendo.observable({
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.get("firstName") + " " + this.get("lastName");
}
}); kendo.bind($("span"), viewModel);
</script>

在这个例子中 fullName 为一关联属性,它依赖于 firstName 和 lastName, 使用 set 修改 firstName 或是 LastNam e后,FullName 的值也随之变化。

要注意的是 fullName 的实现,对 firstName,和 lastName 的访问,是通过 get 方法来实现的,如果使用下面的方法:

var viewModel = kendo.observable({
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
});

上面代码直接使用 this.firstName 来访问 ObserableObject 的属性,在这种情况下,fullName 不会跟踪 firstName 和 lastName 的变化,此时改变 firstName 和 lastName,fullName 的值不变,因此建议总是使用 get 来访问某个属性。

最新文章

  1. SVN 图标消失
  2. OpenGL、Open Inventor、WebGL、Three.js、ARToolkit、JSARToolkit
  3. leetcode@ [199] Binary Tree Right Side View (DFS/BFS)
  4. javascript每日一练(十四)——弹性运动
  5. C++外观设计模式模式(三)
  6. 利用@media screen实现网页布局的自适应,@media screen and
  7. c++ map unordered_map
  8. PAT (Advanced Level) 1077. Kuchiguse (20)
  9. ReactNative实现图集功能
  10. 第七章&#183; Redis Cluster 核心技术
  11. C# 实现登录并跳转界面
  12. Go语言库之strconv包(转载自--http://blog.csdn.net/alvine008/article/details/51283189)
  13. python栈
  14. gitlab之五: gitlab之webhook
  15. python中的装包与拆包
  16. yolov2源码分析
  17. golang 爬虫
  18. Linux下实现免密登录
  19. WebAPI框架里设置异常返回格式统一
  20. K:跳表

热门文章

  1. 网络最大流dinic模板
  2. 网络工具 NetCat
  3. Gridview 每秒刷新数据
  4. 2016年第七届蓝桥杯国赛试题(JavaA组)
  5. Django 之 requirement.txt 依赖文件生成
  6. 用Python分析国民生产总值
  7. xampp搭建discuz论坛
  8. css样式也技巧
  9. 51nod1117(简单huffman tree)
  10. uoj#352. 新年的五维几何(概率期望+爆搜)