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 ...
随机推荐
- 4种方法实现C#无标题栏窗体的移动
首先C#无标题栏窗体的实现代码 在load时实现 无工具栏+无窗口标题 private void Form1_Load(object sender, EventArgs e) { this.Contr ...
- js 常用验证
邮箱验证: $(function () { $("#txt_Email").blur(function () { var ema ...
- Inno Setup整理
1.如何使inno setup添加快捷方式默认选中 在[Tasks]段,有 Flags:unchecked改成 Flags: checkablealone; 即可 完整代码示例: [Tasks] Na ...
- 为什么选择Netty
支持高并发访问 比核心 Java API 更好的吞吐量,较低的延时资源消耗更少,这个得益于共享池和重用减少内存拷贝 https://baike.baidu.com/item/Netty/1006162 ...
- 3-C++程序的结构1.5
多文件结构和编译预处理命令 1.c++程序的一般组织结构 通常一个项目至少划分为三个文件:类定义文件(*.h文件).类实现文件(*.cpp文件)和类的使用文件(*.cpp,主函数文件).如下: 这三个 ...
- Sharepoint2013搜索学习笔记之创建搜索服务(二)
第一步,进入管理中心,点击管理服务器上的服务 第二步,在服务器上选择需要承载搜索服务的服务器,并启动服务列表上的sharepoint server search 第三步,从管理中心进入管理服务应用程序 ...
- view如何从action中取得数据和 Html辅助方法
方式:1使用弱类型取,2,使用强类型,两者的差别在于view页面最上方声明的方式 如果使用弱类型接受来自控制器的数据,在view页面里完全不需要有任何的生命,数据可以从ViewData,ViewB ...
- 从网络架构方面简析循环神经网络RNN
一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...
- C++经典面试算法题
转自:http://blog.csdn.net/f_r_e_e_x/article/details/50770907 //1.实现strcpy. char* MyStrCpy( char *pDest ...
- 渲染路径-Unity5 的新旧推迟渲染Deferred Lighting Rendering Path
Unity5 的新旧延迟渲染Deferred Lighting Rendering Path unity5 的render path ,比4的区别就是使用的新的deferred rendering,之 ...