Kendo UI开发教程(11): Kendo MVVM (二) ObservableObject 对象

来源:互联网 发布:淘宝上怎么撤销投诉 编辑:程序博客网 时间:2024/05/29 07:18

概述

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

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

例如:

1var viewModel1 = new kendo.data.ObservableObject( {
2  field1: "value1",
3  field2: "value2"
4});
5 
6var viewModel2 = kendo.observable( {
7  field1: "value1",
8  field2: "value2"
9});

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

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

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

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

1var viewModel = {
2   name: "John Doe"
3};
4 
5kendo.bind(document.body, viewModel);
6 
7/*
8The following statement  will fail because the View-Model
9is not an instance of kendo.data.ObservableObject.
10*/
11viewModel.set("name""Jane Doe");

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

读取ObservableObject

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

1var viewModel = kendo.observable({
2 name: "John Doe"
3});
4 
5var name = viewModel.get("name");
6alert(name); // shows "John Doe"

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

1var viewModel = kendo.observable({
2 person: {
3     name: "John Doe"
4 }
5});
6var personName = viewModel.get("person.name");
7alert(personName); // shows "John Doe"

设置ObservableObject属性

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

1var viewModel = kendo.observable({
2    name: "John Doe"
3});
4 
5viewModel.set("name""Jane Doe"); //set the "name" field to "Jane Doe"
6 
7var name = viewModel.get("name");
8alert(name); // shows "Jane Doe"

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

1var viewModel = kendo.observable({
2 person: {
3     name: "John Doe"
4 }
5});
6 
7viewModel.set("person.name""Jane Doe");
8 
9var personName = viewModel.get("person.name");
10alert(personName); // shows "Jane Doe"

创建关联属性(或者成为计算后属性)

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

1<span data-bind="text: fullName"></span>
2<script>
3var viewModel = kendo.observable({
4    firstName: "John",
5    lastName: "Doe",
6    fullName: function() {
7        return this.get("firstName") + " " this.get("lastName");
8    }
9});
10 
11kendo.bind($("span"), viewModel);
12</script>

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

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

1var viewModel = kendo.observable({
2    firstName: "John",
3    lastName: "Doe",
4    fullName: function() {
5        return this.firstName + " " this.lastName;
6    }
7});

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 飞机去程取消分开买的返程怎么办 订完学生票发现使用次数过了怎么办 坐火车买学生票没带学生证怎么办 买了学生票学生证磁条没了怎么办 买了动车学生票没带学生证怎么办 身份证没磁了怎么办能买火车票 格力空调保修单丢了怎么办 格力空调保修期内坏了怎么办 国际联程航班第一程延误怎么办 大麦网演唱会的票售罄了怎么办 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办? 动车晚点赶不上下一趟车怎么办 动车晚点导致没赶上下一趟怎么办 浙大三位一体选考分数报错了怎么办 报到证上时间到期了还没报到怎么办 不停的打嗝已经超过24小时怎么办 面对不给下属做主的领导怎么办 法院说退款受伤人去不了证明怎么办 e栈快递柜没收到短信怎么办 京东快递放门卫丢了怎么办 丰巢快递柜收不到取件码怎么办 丰巢快递柜手机号码填错了怎么办 e栈手机号换了取不出来怎么办 买高铁票起点一样终点不一样怎么办 定火车票把名字写错一个字怎么办 火车票坐完车票丢了报销怎么办 客户交给我的钱被骗了怎么办 要证明网络来源的可靠性该怎么办 魅族手机高德地图信号弱怎么办 t恤的印花粘粘的怎么办 从包图网下载的模板素材丢失怎么办 大屏导航的语音功能怎么办用 手机导航不走地图上面走时怎么办 行车撞到步行人死亡师机逃离怎么办 小天才平板电脑不显示了怎么办