(二)Knockout - ViewModel 的使用
计算属性
实际应用中,我们通常需要对数据进行加工
如: 指定日期格式,将数字相加... 等,此时可使用ko.computed()。当数据发生改变是,KO会使用computed重新计算
DEMO1
更改firstName,lastName值后改变fullName
var AppViewModel = function() {
var me = this;
me.firstName = ko.observable('Bob');
me.lastName = ko.observable('Smith');
me.fullName = ko.computed(function () {
return me.firstName() + " " + me.lastName();
}, this);
}
ko.applyBindings(new AppViewModel());
绑定到View上
<p>First name: <input data-bind="value: firstName"/></p>
<p>Last name: <input data-bind="value: lastName"/></p>
<h2>Hello, <span data-bind="text: fullName"/>!</h2>
DEMO2
修改fullName,从而更新firstName,lastName的值
<p>First name: <input data-bind="value: firstName"/></p>
<p>Last name: <input data-bind="value: lastName"/></p>
<h2>Hello, <span data-bind="value: fullName"/>!</h2>
self.fullName = ko.computed({
read: function () {
return me.firstName() + " " + me.lastName();
},
write: function (value) {
var lastSpacePos = value.lastIndexOf(" ");
if (lastSpacePos > 0) { // Ignore values with no space character
me.firstName(value.substring(0, lastSpacePos)); // Update "firstName"
me.lastName(value.substring(lastSpacePos + 1)); // Update "lastName"
}
},
owner: me
});
DEMO3
金额格式的自动转换(包括精度和格式)已经垃圾字符的过滤
<p>Enter bid price: <input data-bind="value: formattedPrice"/></p><br/>
var parseModel = function() {
var me = this;
me .price = ko.observable(25.99);
me .formattedPrice = ko.computed({
read: function() {
return '$' + me.price().toFixed(2);
},
write: function(val) {
val = parseFloat(value.replace(/[^\.\d]/g, ""));
me.price(isNaN(val ) ? 0 : val );
},
owner: me
}); };
ko.applyBindings(new parseModel());
DEMO4
过滤并验证用户输入
<p>Enter a numeric value: <input data-bind="value: attemptedValue"/>
<span data-bind="visible:lastInputWasValid()">验证通过</span>
</p>
var MyViewModel = function() {
var me = this;
me.acceptedNumericValue = ko.observable(123);
me.lastInputWasValid = ko.observable(true); me.attemptedValue = ko.computed({
read: me.acceptedNumericValue,
write: function (value) {
if (isNaN(value))
me.lastInputWasValid(false);
else {
me.lastInputWasValid(true);
me.acceptedNumericValue(value); // Write to underlying storage
}
},
owner: me
});
} ko.applyBindings(new MyViewModel());
(二)Knockout - ViewModel 的使用的更多相关文章
- MVC MVVM Knockout viewmodel 提交 完整过程,包含序列化 JSON 和 字典模型绑定
//JSON 通用操作------------------------------------------------------------------------------using Syste ...
- (四 )Knockout - ViewModel 的使用3 - 对象属性变化的实时更新
ko.observableArray()就可以自动检测属性,其实他只是监控对象,而不是对象中的属性 使用ko.observable()进行处理 DEMO1 实时更新属性 //定义user数据对象 va ...
- (三)Knockout - ViewModel 的使用2 - select、list 应用
select下拉菜单 <select>常用的data-bind参数: •options : 指向数组或ko.observableArray(),KO会将数组元素转换为下拉选项.如果是ko. ...
- .NET MVC4 数据验证Model(二)
一.概述 MVC分为ViewModel.Control.View,对数据的封装MVC做的很好,确实是不错的WEB框架,针对MVC的ViewModel封装的也是相当的不错,最近做一个MVC的项目,采 ...
- ContentControl 与 ViewModel (一)
前阵子有人问我MVVM模式下,在View中嵌套View,切换View.想一想还是写下来吧. 主要就是用到 ContentControl 和 DataTemplate,这算是一种 ViewModel F ...
- Knockout Grid - Loading Remote Data
http://wijmo.com/grid-with-knockout-viewmodel-loading-remote-data/ We were hearing quite a few peopl ...
- Android框架式编程之ViewModel
一.ViewModel介绍 ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据.ViewModel中数据会一直存活即使 Activity Configuration发生变 ...
- 使用MVVM设计模式构建WPF应用程序
使用MVVM设计模式构建WPF应用程序 本文是翻译大牛Josh Smith的文章,WPF Apps With The Model-View-ViewModel Design Pattern,译者水平有 ...
- 小记:iOS 中一般对于 view 不依赖 model 的的两种代码书写形式
一. 前言 对于在 MVC 的定义中,view 层是不引用 model 层,view 和 model 是不相往来的 一般开发中,我们都写过 在自定义 view 中增加一个 model 的属性,外接直接 ...
随机推荐
- javaWeb遍历获取session中的值
//方法一:通过遍历的方法进行遍历 String FileName=""; HttpSession session=request.getSession();//获取session ...
- STM32库中 __IO 修饰符(volatile修饰符)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原 ...
- jQuery plugin
SidebarJS http://makotot.github.io/sidebar/
- Ganglia + Nagios 初步实践
参考文档: http://www.bubuko.com/infodetail-715636.html http://www.linuxidc.com/Linux/2014-01/95804p2.htm ...
- FLASK初步实践
感觉经过DJANGO,CI,RAILS之类的WEB框架之后,FLASK的思路就比较顺畅了... FLASKR.PY import sqlite3 from flask import Flask, re ...
- RSS新闻阅读器
1.RSS格式结构 http://rss.sina.com.cn/blog/tech/kj.xml <?xml version="1.0" encoding="ut ...
- WPF利用动画实现圆形进度条
原文:WPF利用动画实现圆形进度条 这是我的第一篇随笔,最近因为工作需要,开始学习WPF相关技术,自己想实现以下圆形进度条的效果,逛了园子发现基本都是很久以前的文章,实现方式一般都是GDI实现的,想到 ...
- !!!全球最流行开源硬件平台!不知道就OUT了!
全球最流行的几个开源硬件平台!不知道就OUT了! 随着物联网的推广和普及,五年内全球会有200亿台智能设备的需求,而如今随着创客概念的兴起,开源硬件也越加的火热,让我们来看看现在都有哪些主流的开源硬件 ...
- Java---IO加强(2)
转换流 ★转换流功能1:充当字节流与字符流之间的桥梁 需求:模拟英文聊天程序,要求: (1) 从键盘录入英文字符,每录一行就把它转成大写输出到控制台: (2) 保存聊天记录到字节流文件. 要求1的设计 ...
- 【6】JAVA---地址App小软件(QueryPanel.class)(表现层)
查找模块: 年龄可进行段查找. 其他的都是模糊匹配. 空格为无用字符,会屏蔽的(除年龄). (如果在年龄中输入空格,会出现异常,当时没想到这点,要防护这点很容易的,但因为在这个小软件的编写过程,我主要 ...