Kendo MVVM (一) 概述

Model View ViewModel (MVVM)  是开发人员经常使用的一种设计模式,以实现数据模型(Model)和视图(View)的分离。MVVM 中的 ViewModel 部分负责把模型中的数据对象以某种方便的形式和 View 结合起来(通常是通过数据绑定的方式)。

Kendo MVVM 实现了 MVVN 设计模式,并且支持和 Kendo 框架的其它部分(如UI组件和数据源)的无缝连接。

准备开始

使用 MVVM 模式首先创建 ViewModel 对象,ViewModel 对象代表了可以使用 View 显示的数据对象,Kendo 框架中使用 kendo.observable 函数通过传入 JavaScript 对象的方法来定义一个 ViewModel 对象。比如:

var viewModel = kendo.observable({
name: "John Doe",
displayGreeting: function() {
var name = this.get("name");
alert("Hello, " + name + "!!!");
}
});

然后使用 HTML 创建一个 View,这个 View 包含一个按钮和一个文本框。

<div id="view">
<input data-bind="value: name" />
<button data-bind="click: displayGreeting">Display Greeting</button>
</div>

其中文本框(input) 通 过data-bind 属性指明绑定到 ViewModel 对象的 name 域。 此时 name 域值发生变化将会反映到 UI 界面的 Input 输入框内容的变化。反之亦然,当 UI 输入框内容发生变化时,ViewModel 的 name 域也发生变化。 按钮的 click 事件绑定到 ViewModel 的 displayGreeting 方法。

最后,通过 bind 方法将 View 和 ViewModel 绑定起来。

kendo.bind($("#view"), viewModel); 完整的代码如下:

<!doctype html>
<html>
<head>
<title>Kendo UI Web</title>
<link href="styles/kendo.common.min.css" rel="stylesheet" />
<link href="styles/kendo.default.min.css" rel="stylesheet" />
<script src="https://7n.w3cschool.cn/attachments/image/wk/kendouidevelopmenttutorial/jquery.min.js"></script>
<script src="https://7n.w3cschool.cn/attachments/image/wk/kendouidevelopmenttutorial/kendo.web.min.js"></script> </head>
<body>
<div id="view">
<input data-bind="value: name" />
<button data-bind="click: displayGreeting">Display Greeting</button>
</div> <script>
var viewModel = kendo.observable({
name: "John Doe",
displayGreeting: function () {
var name = this.get("name");
alert("Hello, " + name + "!!!");
}
}); kendo.bind($("#view"), viewModel);
</script>
</body>
</html>

数据绑定

数据绑定将 DOM 元素(或者 UI 组件)的属性绑定到 ViewModel 的某个属性或是方法。绑定通过设置 data-bind 属性,采用 “绑定名称 : ViewModel 的属性或方法”的格式,也就是 value : name 的形式来指明。上面的例子使用了两种不同类型的绑定,value 和 click。 Kendo MVVM 也支持其它类型的绑定,如 source, html, attr ,visible,enable 等。 data-bind 也可以支持通过逗号分隔的属性列表。 Kendo MVVM 数据绑定也支持嵌套的 ViewModel 属性。

比如下例 把 div 绑定到 person.name:

<div data-bind="text: person.name">
</div>
<script>
var viewModel = kendo.observable({
person: {
name: "John Doe"
}
});
kendo.bind($("div"), viewModel);
</script>

要注意的是 data-bindings 的值不是 Javascript 代码,不可以使用在 data-bindings 中使用 javascript 方法,比如

<div data-bind="text: person.name.toLowerCase()"></div>

要实现上面使用小写的功能,可以使用下面的实现:

<div data-bind="text: person.lowerCaseName"></div>
<script>
var viewModel = kendo.observable({
person: {
name: "John Doe",
lowerCaseName: function() {
return this.get("name").toLowerCase();
}
}
});
kendo.bind($("div"), viewModel);
</script>
 

Kendo MVVM (一) 概述的更多相关文章

  1. Kendo MVVM (二) ObservableObject 对象

    概述 Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的.它可以监控改变( UI 变化或是值的变化)并通知 ...

  2. Kendo UI开发教程(22): Kendo MVVM 数据绑定(十一) Value

    Value绑定可以把ViewModel的某个属性绑定到DOM元素或某个UI组件的Value属性.当用户修改DOM元素或UI组件的值时,绑定的ViewModel的值也随之发生改名.同样,如果ViewMo ...

  3. Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click

    Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...

  4. Kendo UI开发教程(16): Kendo MVVM 数据绑定(五) Events

    本篇和Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click类似,为事件绑定的一般形式.Events绑定支持将ViewModel的方法绑定到DOM元素的事件处理(如鼠标事 ...

  5. Kendo MVVM 数据绑定(十一) Value

    Kendo MVVM 数据绑定(十一) Value Value 绑定可以把 ViewModel 的某个属性绑定到 DOM 元素或某个 UI 组件的 Value 属性.当用户修改 DOM 元素或 UI ...

  6. Kendo MVVM 数据绑定(十) Source

    Kendo MVVM 数据绑定(十) Source Source 绑定可以把 ViewModel 的值和由 Kendo 模板定义的目标元素绑定,如果 ViewModel 的值发生变化,被绑定的目标元素 ...

  7. Kendo MVVM 数据绑定(九) Text

    Kendo MVVM 数据绑定(九) Text Text 绑定可以使用 ViewModel 来设置 DOM 元素的文本属性,如果需要设置 input,textarea,或 select 的显示,需要使 ...

  8. Kendo MVVM 数据绑定(八) Style

    Kendo MVVM 数据绑定(八) Style Style 绑定可以通过 ViewModel 绑定到 DOM 元素 CSS 风格属性,例如: <span data-bind="sty ...

  9. Kendo MVVM 数据绑定(七) Invisible/Visible

    Kendo MVVM 数据绑定(七) Invisible/Visible Invisible/Visible 绑定可以根据 ViewModel 的某个属性来显示/隐藏 DOM 元素.例如: <d ...

随机推荐

  1. kindle 3 webbrowser破解,

    首先下载破解: http://183.60.157.10/down_group83/M00/06/31/tzydCk3MyHYAAAAAAUTLHFYI-wk8562757/webpatch.7z?k ...

  2. rmmod: chdir(/lib/modules): No such file or directory

    内核版本:linux3.4.20 交叉编译器:arm-linux-gcc 4.3.3 busybox :  busybox 1.20 问题: 使用rmmod会出现 rmmod : chdir(/lib ...

  3. Unique Binary Search Trees-计算表示相同序列的不同BST个数

    题目描述: 给定整数n,计算存储序列为1...n的结构唯一的BST的个数 题目来源: http://oj.leetcode.com/problems/unique-binary-search-tree ...

  4. [poj1222]EXTENDED LIGHTS OUT(高斯消元)

    题意:每个灯开启会使自身和周围的灯反转,要使全图的灯灭掉,判断灯开的位置. 解题关键:二进制高斯消元模板题. 复杂度:$O({n^3})$ #include<cstdio> #includ ...

  5. editplus怎么在前后插入字符

    快捷键:ctrl+h 未编辑之前: 源: 一:行首批量添加   查找"^" 替换为“我是行首aaa” 二: 行尾批量添加   查找"\n" 替换为“'bbb我是 ...

  6. gcc -frandom-seed

    -frandom-seed=string This option provides a seed that GCC uses when it would otherwise use random nu ...

  7. (转)apache2.2.x+tomcat7.0.x集群+…

    apache http server下载地址 http://httpd.apache.org/download.cgi#apache22 这里下载的是httpd-2.2.21-win32-x86-op ...

  8. 5. 通过PHP反序列化进行远程代码执行

    php序列化与反序列化 最近准备复现一下ecshop2.x,3.x的注入漏洞,其中涉及到了php反序列化的问题,由于之前太小白 ,导致粗心大意,所以此对php反序列化漏洞进行更详细的分析. 提起php ...

  9. 超级实用的Chrome插件

    1.JSON-handle:浏览器前台访问后台,后台返回json,它帮你格式化 2.Page Ruler:帮你测量页面上任何位置的长宽高 3. Momentum:打开新的tab页就像打开了一个新的世界 ...

  10. 反射(type和assembly)

    这里简要介绍type和assembly 自定义特性 为了理解编写自定义特性的方式,应了解一下在编译器遇到代码中某个应用自定义特性的元素时,该如何处理. [AttributeUsage(Attribut ...