学习KnockOut第二篇之Counter

欲看此篇,必先----------------------------------------------------------------------------------看上篇。

先说好了,只是学习笔记。

第一步。先写一个简单的text绑定吧。先写VM,再写激活代码,最后写V,那样V才会有智能提示。此处不多讲,上文中有写到过。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8 </body>
 9 </html>
10 <script src="knockout-2.3.0.js"></ script>
11 <script type="text/javascript">
12     var CounterViewModel = function() {
13         this.numberOfClick = ko.observable(0);
14     };
15     ko.applyBindings(new CounterViewModel());
16 </script>

text绑定

效果将会是这样:

第二步。再加一个按钮。每点一次,显示的次数就加一次。那么,就得用到click绑定了。也就是在被点击的时候执行我们定义的JavaScript函数。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8     <button data-bind ="click:registerClick">Can U click me?</ button>
 9 </body>
10 </html>
11 <script src="knockout-2.3.0.js"></ script>
12 <script type="text/javascript">
13     var CounterViewModel = function() {
14         this.numberOfClick = ko.observable(0);
15         //this.registerClick = this.numberOfClick(this.numberOfClick() + 1);
16         this.registerClick = function() {
17             return this.numberOfClick( this.numberOfClick() + 1);
18         };
19     };
20     ko.applyBindings(new CounterViewModel());
21 </script>

点击一次按钮数字就增加一次可好。click绑定。

我点击六次按钮后将会是这样:

第三步。那么,现在,有新需求了。当我们点击了五次之后就不再让用户点击,也就是让此按钮变得不能点击。那么就得用到disable绑定了。其用法也很简单,disable绑定,只有其参数值为true的时候才会disable。需要说一个的就是布尔值false,数字0,null,undefined都是假值(即false,不生效)。与disable相对应的就是enable,用法一样,实际效果正好相反。另外他因为得计算两个监控属性的值,那么还得用到computed.

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8     <button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
 9 </body>
10 </html>
11 <script src="knockout-2.3.0.js"></ script>
12 <script type="text/javascript">
13     var CounterViewModel = function() {
14         this.numberOfClick = ko.observable(0);
15         this.registerClick = function() {
16             return this.numberOfClick( this.numberOfClick() + 1);
17         };
18         this.tooManyClicks = ko.computed( function () {
19             return this.numberOfClick() >= 5;
20         }, this);
21     };
22     ko.applyBindings(new CounterViewModel());
23 </script>

让按钮不能用吧。disable绑定。

看一下效果图,按钮里面字体颜色暗得不是很明显,不过真是的不能点击了,当点击次数有5次后:

既然,不让用按钮了,那么总得跟用户说一个原因吧。并且楼主你都说,按钮不能点的“暗示”不是很明显的。能不能当点击那么多次数之后,让按钮不可用,且给用户相应的信息呢。自然可以。那么我们得用到visible绑定了。加个DIV,在DIV里写点提示信息,将这个DIV绑定一下吧。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8     <button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
 9     <div data-bind ="visible:tooManyClicks">
10         I think you are tired,U can have a seat now.
11     </div >
12 </body>
13 </html>
14 <script src="knockout-2.3.0.js"></ script>
15 <script type="text/javascript">
16     var CounterViewModel = function() {
17         this.numberOfClick = ko.observable(0);
18         this.registerClick = function() {
19             return this.numberOfClick( this.numberOfClick() + 1);
20         };
21         this.tooManyClicks = ko.computed( function () {
22             return this.numberOfClick() >= 5;
23         }, this);
24         };
25     ko.applyBindings(new CounterViewModel());
26 </script>

来点友情提示。visible绑定。

那么当点击5次后友情提示友好的出现了:

好的呢。现在是明显的不能点击了。到这里就结束了么,你能不能给个按钮让用户重置一下呢。如果用户想重新点击的话。自然可以,依旧如是。依旧是点击事件,click绑定,只是这次是当点击此按钮时就将此上面的值变为0就好了。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8     <button data-bind ="click:registerClick,disable:tooManyClicks"> Can U click me?</button>
 9     <div data-bind ="visible:tooManyClicks">
10         I think you are tired,U can have a seat now.
11         <button data-bind="click:resetClick"> Reset</ button>
12     </div >
13 </body>
14 </html>
15 <script src="knockout-2.3.0.js"></ script>
16 <script type="text/javascript">
17     var CounterViewModel = function () {
18         this.numberOfClick = ko.observable(0);
19         this.registerClick = function () {
20             return this.numberOfClick( this.numberOfClick() + 1);
21         };
22         this.tooManyClicks = ko.computed( function () {
23             return this.numberOfClick() >= 5;
24         }, this);
25         this.resetClick = function() {
26             return this.numberOfClick(0);
27         };
28     };
29     ko.applyBindings(new CounterViewModel());
30 </script>

重置按钮,再现一次click绑定

此处不太好给图,当点击Reset的时候它真的就回到第一个图那里去了,不信你可以试试,此处无图亦有真相。

楼主,你这个明明就是看官网的例子,然后做了一点自己的分解,你也好意思挂到博客园上来。

是的呢,楼主初涉,只有在官网上学习下了。做点分解,记下笔记,加深印象,让你见笑了。

见笑且不说,那么,现在我就有一个需求,看你能不能做出来。

你且说先。

就是刚才你也说了,那个不能点击的按钮不能点的不是很明显,尽管后面有了友情提示和重置按钮。你能不能当点击到一定次数后就让按钮上的字也改变一下呢。

比如就写上“我不能被点到了”或者“你不能点击我了”,诸如此类的字呢,这样么?

正是此意。

那容我试试。

楼主想了会,我们可以用span标签将此按钮里的字体data-bind一下,给之一个初始值,在初始化ViewModel的时候。在计算监控属性的时候,做一个判断,如果监控numberOfClick()的值大于等于5则返回一个你想改变的值就好了。当然不要忘了,当点击重置按钮时,也要重写一个按钮里字的值。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title >Ando‘s  Counter </title>
 5 </head>
 6 <body>
 7     <div >You‘ve clicked <span data-bind="text:numberOfClick"></span >&nbsp;times</div >
 8     <button data-bind ="click:registerClick,disable:tooManyClicks">< span data-bind="text:buttonText"></span ></button>
 9     <div data-bind ="visible:tooManyClicks">
10         I think you are tired,U can have a seat now.
11         <button data-bind="click:resetClick"> Reset</ button>
12     </div >
13 </body>
14 </html>
15 <script src="knockout-2.3.0.js"></ script>
16 <script type="text/javascript">
17     var CounterViewModel = function () {
18         this.numberOfClick = ko.observable(0);
19         this.buttonText = ko.observable( "Can U click me?");
20         this.registerClick = function () {
21             return this.numberOfClick( this.numberOfClick() + 1);
22         };
23         this.tooManyClicks = ko.computed( function () {
24             this.numberOfClick() >= 5;
25             if ( this.numberOfClick() >= 5) {
26                 return this.buttonText( "U can not click me now");
27             }
28         }, this);
29         this.resetClick = function() {
30             this.numberOfClick(0);
31             this.buttonText( "Can U click me?");
32         };
33     };
34     ko.applyBindings(new CounterViewModel());
35 </script>

按钮里的字也请楼主动态绑定。

附图一张:

第二篇学习笔记到此结束。 欢迎斧正。

时间: 2024-10-11 04:54:51

学习KnockOut第二篇之Counter的相关文章

老老实实学习WCF[第二篇] 配置wcf

老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; name

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

JavaWeb学习总结第二篇--第一个JavaWeb程序

JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下我JavaWeb学习的过程,加油! 我们在第一篇中提到了开发JavaWeb程序需要的一些工具,在安装完成后(请朋友们自行网上查找安装步骤和配置),接下来我以图片形式介绍编写JavaWeb程序. 一:创建Web项目 1.打开IntelliJ IDEA->File->New Project 项目创建完

学习KnockOut第一篇之Hello World

笔者刚开始学习KnockOut.写的内容就相当于一个学习笔记.且在此处向官网致敬,比较喜欢他们家的Live Example版块,里面有jsFiddle.至于文档,辅导章节,也是有的.附上地址:KnockOut.感兴趣的话可以看一下的. 那么,开始. 先写一个连Hello World级别都算不上的.看了文档,貌似很简单的样子. 第一步引进ko的js脚本.第二步创建一个ViewModel.第三步创建一个简单的View,用data-bind绑定. 一个非常简单的text绑定. 1 <!DOCTYPE

Android学习笔记(第二篇)View中的五大布局

PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念   view是什么呢?我们已经知道一个Activity是Android的显示层,但是Activity是不能直接显示在屏幕上的,它也像JSP那样,显示的东西是html,那么Android也不例外,Activity是一个抽象的壳子,而显示的东西就是view或者是viewgroup(图形用户组件)....   有了这个概念,我们就清楚view是如何

OpenGL学习系列第二篇

在这个教程里,我们一起来玩第一个OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架. 在CodeBlock里创建一个新的GLUT Win32程序(不是console控制台程序)后,我们还需要链接OpenGL库文件. 代码的前4行包括了我们使用的每个库文件的头文件.如下所示: #include <windows.h>// Windows的头文件 #include <glew.h>       // 包含最新的gl.

js学习笔记第二篇

Js笔记整理 1.StringAPI a)        大小写转换:str.toUpperCase();str.toLowerCase(); b)        获取指定位置字符: Str[i]--->倒数第二个str[str.length-2] str.charAt(i) str.charCodeAt(i);返回字符的Unicode吗? c)  查找关键字的位置: I.var i=str.indexOf(“kword”[,starti]);如果找不到返回-1,starti默认为0 Ii va

小菜鸟学Chromium之OpenGL学习系列第二篇

在这个教程里,我们一起来玩第一个OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架. 在CodeBlock里创建一个新的GLUT Win32程序(不是console控制台程序)后,我们还需要链接OpenGL库文件. 代码的前4行包括了我们使用的每个库文件的头文件.如下所示: #include <windows.h>// Windows的头文件 #include <glew.h>       // 包含最新的gl.

Python学习【第二篇】Python入门

Python安装 windows: 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机]-->[属性]-->[高级系统设置]-->[高级]-->[环境变量]-->[在第二个内容框中找到 变量名为Path 的一行,双击] --> [Python安装目录追加到变值值中,用 : 分割] 如:原来的值;C:\python27,前面有分号 linux: 自带python