学习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 >&nbsp;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绑定

效果将会是这样:

 
 
 
 
 
       第二步。再加一个按钮。每点一次,显示的次数就加一次。那么,就得用到click绑定了。也就是在被点击的时候执行我们定义的JavaScript函数。
 <!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 >&nbsp;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绑定。

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

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

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

 <!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 >&nbsp;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次后友情提示友好的出现了:

  
 
 
 
 
     
      好的呢。现在是明显的不能点击了。到这里就结束了么,你能不能给个按钮让用户重置一下呢。如果用户想重新点击的话。自然可以,依旧如是。依旧是点击事件,click绑定,只是这次是当点击此按钮时就将此上面的值变为0就好了。
 <!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 >&nbsp;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的时候它真的就回到第一个图那里去了,不信你可以试试,此处无图亦有真相。

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

      是的呢,楼主初涉,只有在官网上学习下了。做点分解,记下笔记,加深印象,让你见笑了。
      见笑且不说,那么,现在我就有一个需求,看你能不能做出来。
      你且说先。
      就是刚才你也说了,那个不能点击的按钮不能点的不是很明显,尽管后面有了友情提示和重置按钮。你能不能当点击到一定次数后就让按钮上的字也改变一下呢。
      比如就写上“我不能被点到了”或者“你不能点击我了”,诸如此类的字呢,这样么?
      正是此意。
      那容我试试。
      楼主想了会,我们可以用span标签将此按钮里的字体data-bind一下,给之一个初始值,在初始化ViewModel的时候。在计算监控属性的时候,做一个判断,如果监控numberOfClick()的值大于等于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 >&nbsp;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的更多相关文章

  1. 学习KnockOut第一篇之Hello World

    学习KnockOut第一篇之Hello World 笔者刚开始学习KnockOut.写的内容就相当于一个学习笔记.且在此处向官网致敬,比较喜欢他们家的Live Example版块,里面有jsFiddl ...

  2. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

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

    JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...

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

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...

  5. 跟初学者学习IbatisNet第二篇

    在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程. 我们一般把存储过程分为两种 ...

  6. Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)

    第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<E ...

  7. Python学习【第二篇】Python入门

    Python入门 Hello World程序 在linux下创建一个叫hello.py,并输入 print("Hello World!") 然后执行命令:python hello. ...

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

    PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念   view是什么呢?我们已经知道一个Act ...

  9. python学习【第二篇】初识python

    python的安装 windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机] ...

随机推荐

  1. Table of Contents - Ehcache

    Ehcache 2.9.x API Developer Guide Key Classes and Methods Basic Caching Cache Usage Patterns Searchi ...

  2. HTML5_用语义化标记重新定义博客

    HTML5文档的第一行便是文档类型声明,文档类型声明的作用有两个 一:验证器依据文档类型来判断采用何种验证规则去验证代码 二:文档类型声明能够强制IE6,IE7,IE8以“标准模式”渲染页面 1: & ...

  3. Every student in every school should have the opportunity to learn to code

    “I think everybody in this country should learn how to program a computerbecause it teaches you how ...

  4. EL表达式隐含对象

    EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据. 语法:${隐式对象名称}  :获得对象的引用 <%@ page lang ...

  5. Part 1 some difference from asp.net to asp.net mvc4

    Part 1 some difference from asp.net to asp.net mvc4 In MVC URL's are mapped to controller Action Met ...

  6. (转)Android之常用功能方法大集合

    这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需.由于经过多次转载,源文作者不确凿,在此申明,敬请见谅.不得不赞,非常实用. 1.判断sd卡是否存在 boolea ...

  7. C#中ToString和Formate格式大全

    C#中ToString格式大全 stringstr1 =); //result: 56,789.0 stringstr2 =); //result: 56,789.00 stringstr3 =); ...

  8. Cocos2d-x坐标系介绍

    在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-x坐标系中它原点是在左下角的,而且Cocos2d ...

  9. iOS 中对各种视图的截屏以及分享

    1.一个第三方的工具,主要是对表视图.滚动视图.视图的扩展,用法也很简单 image = [tableview screenshot]; 2.然后将截的图片分享出去,在分享的时候,因为多个地方用到了截 ...

  10. C语言知识总结(3)

    数组 数组的特点: 只能存放一种类型的数据,比如int类型的数组.float类型的数组 里面存放的数据称为“元素” 初始化方式 ] = {, , }; ] = {,}; , , }; ] = {[]= ...