学习KnockOut第二篇之Counter
第一步。先写一个简单的text绑定吧。先写VM,再写激活代码,最后写V,那样V才会有智能提示。此处不多讲,上文中有写到过。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function() {
this.numberOfClick = ko.observable();
};
ko.applyBindings(new CounterViewModel());
</script>
text绑定
效果将会是这样:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
<button data-bind ="click:registerClick">Can U click me?</ button>
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function() {
this.numberOfClick = ko.observable();
//this.registerClick = this.numberOfClick(this.numberOfClick() + 1);
this.registerClick = function() {
return this.numberOfClick( this.numberOfClick() + );
};
};
ko.applyBindings(new CounterViewModel());
</script>
点击一次按钮数字就增加一次可好。click绑定。
我点击六次按钮后将会是这样:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
<button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function() {
this.numberOfClick = ko.observable();
this.registerClick = function() {
return this.numberOfClick( this.numberOfClick() + );
};
this.tooManyClicks = ko.computed( function () {
return this.numberOfClick() >= ;
}, this);
};
ko.applyBindings(new CounterViewModel());
</script>
让按钮不能用吧。disable绑定。
看一下效果图,按钮里面字体颜色暗得不是很明显,不过真是的不能点击了,当点击次数有5次后:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
<button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
<div data-bind ="visible:tooManyClicks">
I think you are tired,U can have a seat now.
</div >
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function() {
this.numberOfClick = ko.observable();
this.registerClick = function() {
return this.numberOfClick( this.numberOfClick() + );
};
this.tooManyClicks = ko.computed( function () {
return this.numberOfClick() >= ;
}, this);
};
ko.applyBindings(new CounterViewModel());
</script>
来点友情提示。visible绑定。
那么当点击5次后友情提示友好的出现了:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
<button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
<div data-bind ="visible:tooManyClicks">
I think you are tired,U can have a seat now.
<button data-bind="click:resetClick"> Reset</ button>
</div >
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function () {
this.numberOfClick = ko.observable();
this.registerClick = function () {
return this.numberOfClick( this.numberOfClick() + );
};
this.tooManyClicks = ko.computed( function () {
return this.numberOfClick() >= ;
}, this);
this.resetClick = function() {
return this.numberOfClick();
};
};
ko.applyBindings(new CounterViewModel());
</script>
重置按钮,再现一次click绑定
此处不太好给图,当点击Reset的时候它真的就回到第一个图那里去了,不信你可以试试,此处无图亦有真相。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title >Ando's Counter </title>
</head>
<body>
<div >You've clicked <span data-bind="text:numberOfClick"></span > times</div >
<button data-bind ="click:registerClick,disable:tooManyClicks">< span data-bind="text:buttonText"></span ></button>
<div data-bind ="visible:tooManyClicks">
I think you are tired,U can have a seat now.
<button data-bind="click:resetClick"> Reset</ button>
</div >
</body>
</html>
<script src="knockout-2.3.0.js"></ script>
<script type="text/javascript">
var CounterViewModel = function () {
this.numberOfClick = ko.observable();
this.buttonText = ko.observable( "Can U click me?");
this.registerClick = function () {
return this.numberOfClick( this.numberOfClick() + );
};
this.tooManyClicks = ko.computed( function () {
this.numberOfClick() >= ;
if ( this.numberOfClick() >= ) {
return this.buttonText( "U can not click me now");
}
}, this);
this.resetClick = function() {
this.numberOfClick();
this.buttonText( "Can U click me?");
};
};
ko.applyBindings(new CounterViewModel());
</script>
按钮里的字也请楼主动态绑定。
附图一张:

学习KnockOut第二篇之Counter的更多相关文章
- 学习KnockOut第一篇之Hello World
学习KnockOut第一篇之Hello World 笔者刚开始学习KnockOut.写的内容就相当于一个学习笔记.且在此处向官网致敬,比较喜欢他们家的Live Example版块,里面有jsFiddl ...
- RabbitMQ学习总结 第二篇:快速入门HelloWorld
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- JavaWeb学习总结第二篇--第一个JavaWeb程序
JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...
- 老老实实学习WCF[第二篇] 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- 跟初学者学习IbatisNet第二篇
在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程. 我们一般把存储过程分为两种 ...
- Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)
第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<E ...
- Python学习【第二篇】Python入门
Python入门 Hello World程序 在linux下创建一个叫hello.py,并输入 print("Hello World!") 然后执行命令:python hello. ...
- Android学习笔记(第二篇)View中的五大布局
PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念 view是什么呢?我们已经知道一个Act ...
- python学习【第二篇】初识python
python的安装 windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机] ...
随机推荐
- java中的@Override是否需要
java中的重载注解 @Override 是否需要?今天被人问到这个问题,回答的不太好,下来看了一下源码 /** * Annotation type used to mark methods that ...
- SQL批量修改表名
SELECT NAME FROM SYS. ALL_OBJECTS WHERE TYPE= 'U' ORDER BY MODIFY_DATE DESC --查询所有表名 SELECT NAME FRO ...
- php curl 的用法 转载
curl 是使用URL语法的传送文件工具,支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP.curl 支持SSL证书.HTTP POS ...
- FMS服务器在centos下安装
首先当然得先下载安装包了 http://pan.baidu.com/s/1jGL1Nvw #要先安装一下这个包,否则会提收提示错误,缺少libcap yum install compat-libcap ...
- in/exists not in/not exists null
in/not in exists/not exists null的理解 两个测试表 create table tmp01 as with tmp as ( select '1' as id from ...
- swift创建对象use of undeclared type 自己的类
在swift项目中,引用自己创建的类,编译会成功的,但是会出现红色感叹号,类似报错,如:swift创建对象use of undeclared type 自己的类,或者 use of unresolv ...
- iOS 中对各种视图的截屏以及分享
1.一个第三方的工具,主要是对表视图.滚动视图.视图的扩展,用法也很简单 image = [tableview screenshot]; 2.然后将截的图片分享出去,在分享的时候,因为多个地方用到了截 ...
- 兼容IE,chrome 等所有浏览器 回到顶部代码
今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非IE浏览器下可以运行,在IE浏览器下却运行不了. 故将其代码搬弄过来做了些许修改后,完美支持了IE下的运行. 主要实现功能代码文件: & ...
- 字符集转换: Unicode - Ansi
字符集转换: Unicode - Ansi string UnicodeToAnsi ( const wstring& wstrSrc ) { /*!< 分配目标空间, 一个16位Uni ...
- 15个最新加速 Web 开发的框架和工具
我们为开发人员挑选了15个最新的 Web 开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给用 ...