Knockout学习之组合监控属性
组合监控属性
顾名思义,就是我们可以将多个属性合并为一个属性。这样在显示的时候就是整体了,并且其中任何一个属性发生改变,这个属性也都会随之发生改变从而更新视图,而这些只需要使用computed函数就可以实现,比如下面的代码我们将firstName和lastName合并为fullName属性,并呈现:
<span data-bind="text: fullName" /> <script type="text/javascript">
function AppViewModel() {
this.firstName = ko.observable("Bob");
this.lastName = ko.observable("Smith");
this.fullName = ko.computed(function () {
return this.firstName() + " " + this.lastName();
}, this);
}; ko.applyBindings(new AppViewModel());
</script>
这里我们通过传递一个函数给computed,并且该函数仅仅返回由firstName和lastName组成的完整姓名,这样我们就轻松的将两个属性组合了。其中computed的第二个参数传递的是this,主要是用来指定第一个参数的环境上下文。
上面仅仅只能用于显示,如果我们还要修改这个组合属性,那么就需要将上面的写法给写成如下的方式:
<span data-bind="text: firstName"></span>
<span data-bind="text: lastName"></span>
<input type="text" data-bind="value: fullName" /> <script type="text/javascript">
function AppViewModel() {
this.firstName = ko.observable("Bob");
this.lastName = ko.observable("Smith");
this.fullName = ko.computed({
read: function () {
return this.firstName() + " " + this.lastName();
},
write: function (value) {
var lastSpecPos = value.lastIndexOf(" ");
if (lastSpecPos > 0) {
this.firstName(value.substring(0, lastSpecPos));
this.lastName(value.substring(lastSpecPos + 1));
}
},
owner: this
});
}; ko.applyBindings(new AppViewModel());
</script>
我们将传递给computed的参数改成了一个对象,并且写了read、write、owner属性,其中read用来读取该组合属性,而write用来赋值,所以该函数会有一个value参数,最后的owner跟computed的第二个参数是一样的,主要用来指定read和write函数执行的上下文环境。读者这个时候可以随意的修改文本中的值,会发现前面的值也会跟着变动,这些都是ko带给我们的快捷。
<span data-bind="text: firstName"></span>
<span data-bind="text: lastName"></span>
<input type="text" data-bind="value: fullName" />
<span data-bind="visible:isEdit">你改动过了</span> <script type="text/javascript">
function AppViewModel() {
this.firstName = ko.observable("Bob");
this.lastName = ko.observable("Smith");
this.isEdit = ko.observable(false);
this.fullName = ko.computed({
read: function () {
return this.firstName() + " " + this.lastName();
},
write: function (value) {
var lastSpecPos = value.lastIndexOf(" ");
if (lastSpecPos > 0) {
this.firstName(value.substring(0, lastSpecPos));
this.lastName(value.substring(lastSpecPos + 1));
this.isEdit(true);
}
},
owner: this
});
}; ko.applyBindings(new AppViewModel());
</script>
当然组合属性也不一定非要由多个属性组合,我们也可以将多个属性作为参数,然后通过ajax传递到服务端,从而获取属性值然后显示,比如jquery中的$.getJSON方法。
Knockout学习之组合监控属性的更多相关文章
- 【Knockout】二、监控属性Observables
MVVM和viewModel Knockout是建立在以下三大核心功能之上的: 监控属性和依赖跟踪(Observables and dependency tracking) 声明式绑定(Declara ...
- Knockout学习之监控属性
监控属性 Knockout包含以下三个核心特性: 1.监控属性和依赖跟踪 2.显式绑定 3.模板 下面我们将学习这三点中的第一点,在这之前我们先研究下MVVM模式和视图模型的概念. MVVM和视图模型 ...
- Knockout.Js官网学习(监控属性Observables)
前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel ...
- Knockout 新版应用开发教程之创建view models与监控属性
最近抽出点时间研究MVVM,包括司徒正美的avalon,google的angular,以及Knockout,博客园Tom的Knockout指南 时隔2年了,ko更新了不少,所以文档也相应的变化了,所以 ...
- Knockout学习之监控数组
监控数组 单个监控属性.组合属性虽然可以解决大部分的问题,但是还有很多是他们无法做到的,比如在一组数据中进行移除添加,所以这节我们将要学习监控数组. 由于监控属性是由ko的observable构造,那 ...
- Knockout开发中文API系列2–创建数据模型和监控属性
Observables,这个词的翻译来自汤姆大叔,对于部分翻译不是很准确的,欢迎大家留言,以得到更好的翻译. Knockout是建立在以下3个核心功能之上的: 1. 属性监控与依赖跟踪 2. ...
- knockoutJS学习笔记04:监控属性
一.语法介绍 先来看一个简单的例子: <span data-bind="text:name"></span> var obj = {name:ko.obse ...
- 2.Knockout.Js(监控属性Observables)
前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel ...
- Knockout应用开发指南 第二章:监控属性(Observables)
原文:Knockout应用开发指南 第二章:监控属性(Observables) 关于Knockout的3个重要概念(Observables,DependentObservables,Observabl ...
随机推荐
- iOS:通过Self-Sizing Cells新特性自动计算cell的高度
iOS8 新特性Self-Sizing Cells,自动计算cell的高度 一.简单介绍 UITableView是iOS开发最常用的一个控件,通过代理和数据源方法,几乎能实现各种各样的列表功能.在这里 ...
- Centos 7安装protobuf3.6.1
新版本 google protobuf-3.6.1是现在最新版本,添加了新的特性,看说明 下载地址 https://github.com/protocolbuffers/protobuf/releas ...
- knockout示例
最近项目需要用到knockout js,有关knockout的介绍网上已经很多很多了,但是很少有比较全面的示例,于是乎我就自己做了一个小demo,已备以后查阅.knockout经常和knockout. ...
- CSS的50个代码片段
1.css全局 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...
- MFC中如何给静态文本框添加消息响应
需要两个步骤: 第一个: 是改变它的ID(默认情况下所有的静态文本框的ID都为IDC_STATIC,你需要改变他的ID为其他的值). 第二个: 是在它的属性对话框中选中Notify选项,VS是将该属性 ...
- laravel 5.5 跨域问题解决方案
一.laravel-Cors 安装 在终端执行安装命令如下: composer require barryvdh/laravel-cors 添加服务提供商 在Laravel配置文件app.php的pr ...
- 建模角度理解word embedding及tensorflow实现
http://www.jianshu.com/p/d44ce1e3ec2f 1. 前言 本篇主要介绍关键词的向量表示,也就是大家熟悉的word embedding.自Google 2013 年开源wo ...
- offsetof与container_of宏[总结]
1.前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大.offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址 ...
- (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究
Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...
- BigDecimal 的幂次方运算
public static void main(String[] args){ BigDecimal bg1, bg2; bg1 = new BigDecimal("200000.45&qu ...