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 ...
随机推荐
- poj1094Sorting It All Out——拓扑排序
题目:http://poj.org/problem?id=1094 看到此题,首先觉得这是一种层层递进的关系,所以可以想到用拓扑排序: 就像人工排序,每次需要找到一个最小的,再找到新的最小的……所以用 ...
- 百度地图API的第一次接触——热区
1.代码很简单 var map = new BMap.Map("container"); var point = new BMap.Point(116.404, 39.915); ...
- WPF TreeView 后台C#选中指定的Item, 需要遍历
private TreeViewItem FindTreeViewItem(ItemsControl container, object item) { ...
- μC/OS-II与RT-Thread对比—任务调度
在任务调度器的实现上,μC/OS-II和RT-Thread都采用了位图调度(bitmap scheduling),任务优先级的值越小则代表具有越高的优先级,主要区别在于实现形式,是采用多级队列的形式, ...
- bzoj3629
dfs 跟上道题很像有木有 同样地,我们暴力枚举约数 根据约数和公式,得出$S=\prod_{i=1}^{n}{(1+p+p^{2}+...+p^{a_{i}})}$ 所以每次我们暴力枚举是哪个约数, ...
- Word直接发表博客测试
这是我现在使用的VSCode! 这是另一段测试内容!
- linux查询内存真是利用率
使用top工具查看到Suse Linux的内存占用率很大,可能97%以上,我知道这是Linux的内存使用机制,先将内存整个管理起来,需要的时候在分配给单个进程.但是如果我需要查看系统真实的内存占用率应 ...
- POJ-3050
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4385 Accepted: 2924 Descrip ...
- 【机器学习】文本分类——朴素贝叶斯Bayes
朴素贝叶斯主要用于文本分类.文本分类常见三大算法:KNN.朴素贝叶斯.支持向量机SVM. 一.贝叶斯定理 贝叶斯公式思想:利用已知值来估计未知概率.已知某条件概率,如何得到两个事件交换后的概率,也就是 ...
- Javascript中对文字编码的三个函数
JavaScript中对文字编码主要有3个函数 escape,encodeURI, encodeURIComponent 相应3个解码函数 unescape, decodeURI, decodeURI ...