Kendo MVVM (二) ObservableObject 对象
概述
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 来访问某个属性。
Kendo MVVM (二) ObservableObject 对象的更多相关文章
- Kendo MVVM 数据绑定(二) Checked
Kendo MVVM 数据绑定(二) Checked Checked 绑定用在 checkbox ()或 radio button ()上.注意: checked 绑定只适用于支持 checked 的 ...
- Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click
Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...
- Kendo UI开发教程(16): Kendo MVVM 数据绑定(五) Events
本篇和Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click类似,为事件绑定的一般形式.Events绑定支持将ViewModel的方法绑定到DOM元素的事件处理(如鼠标事 ...
- Kendo MVVM 数据绑定(十) Source
Kendo MVVM 数据绑定(十) Source Source 绑定可以把 ViewModel 的值和由 Kendo 模板定义的目标元素绑定,如果 ViewModel 的值发生变化,被绑定的目标元素 ...
- Kendo MVVM 数据绑定(五) Events
Kendo MVVM 数据绑定(五) Events 本篇和 Kendo MVVM 数据绑定(三) Click 类似,为事件绑定的一般形式.Events 绑定支持将 ViewModel 的方法绑定到 D ...
- Kendo MVVM 数据绑定(三) Click
Kendo MVVM 数据绑定(三) Click Click 绑定可以把由 ViewModel 定义的方法不绑定到目标 DOM 的 click 事件.当点击目标 DOM 元素时触发 ViewModel ...
- Kendo MVVM 数据绑定(一) attr
Kendo MVVM 数据绑定(一) attr Kendo UI MVVM 数据绑定支持的绑定属性有 attr, checked, click, custom , disabled,enabled, ...
- Kendo MVVM (一) 概述
Kendo MVVM (一) 概述 Model View ViewModel (MVVM) 是开发人员经常使用的一种设计模式,以实现数据模型(Model)和视图(View)的分离.MVVM 中的 V ...
- Kendo UI开发教程(22): Kendo MVVM 数据绑定(十一) Value
Value绑定可以把ViewModel的某个属性绑定到DOM元素或某个UI组件的Value属性.当用户修改DOM元素或UI组件的值时,绑定的ViewModel的值也随之发生改名.同样,如果ViewMo ...
随机推荐
- python optparse命令解析模块
来源:http://www.cnblogs.com/pping/p/3989098.html?utm_source=tuicool&utm_medium=referral 来源:http:// ...
- zoom在清除浮动中的利用
zoom 是个困惑了好久的元素,今天对它有了个初步的认识 zoom , ie 的专属属性,在其他浏览器中不起作用,它的原本功能是设置或检测对象的缩放比例(只在ie下起作用) 比如 <div ...
- Spring框架中的@Import、@ImportResource注解
spring@Import @Import注解在4.2之前只支持导入配置类 在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean 使用场景: import注解主要用在基于ja ...
- C# 使用 StreamWriter 写入数据
NetworkStream 类.MemoryStream类 和 FileStream 类都提供了以字节为基本单位的读写方法,但是这种方法首先将待写入的数据转换为字节序列后才能进行读写,当操作的是使用字 ...
- java的clone()的使用
clone()方法的约定 首先明确的是clone()是object的方法.Cloneable接口没有任何方法,它只起到标识的作用.(java的原型模式有用到) Cloneable接口的目的是作为对象的 ...
- hdu3047 Zjnu Stadium (并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- java之Date(日期)、Date格式化、Calendar(日历)
参考http://how2j.cn/k/date/date-date/346.html Date(日期) Date类 注意:是java.util.Date; 而非 java.sql.Date,此类是给 ...
- php 生成图片,只获取字节数据,不以图片格式输出
提示:与直接将结果输出到浏览器的任何内容一样,可以使用输出控制函数(http://www.php.net/./en/ref.outcontrol.php)捕获此函数的输出,并将其保存在字符串(例如)中 ...
- Mac 下sublime的插件
最近更换了本本,入了港行的Mac pro,来替代原来的Thinkpad,在windows上工作做完之后,搭建了一下开发环境,eclipse是必须的,但是luna没有html editor,然后就在 e ...
- JAVA接口详细讲解
接口 接口的概念 接口代表的是一个功能的集合,定义规范,所有的方法都是抽像方法,这是一种思想是一种规则,将这个种规则称为接口. 接口的定义 使用关键字 interface 叫做接口 修饰符 inte ...