1.visible绑定

<div id="myview" data-bind="visible : isVisible">
visible bind
</div>
<script>
var viewModel = {
isVisible : ko.observable(true)
};
viewModel.isVisible(false);
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

2.text绑定

<div id="myview" data-bind="text : name">
visible bind
</div>
<script>
var viewModel = {
name : ko.observable("knockout")
};
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

3.html绑定

<div id="myview" data-bind="html : htmlContent">
</div>
<script>
var viewModel = {
htmlContent : ko.observable("<i>html bind</i>")
};
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

4.CSS绑定

    <div id="myview" data-bind="css : {redbg : testValue() < 0}">
css bind
</div>
    <script>
var viewModel = {
testValue : ko.observable(-1)
};
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

view会随着监控属性的变化自动添加或者删除元素上的CSS class。

5.style绑定

    <div id="myview" data-bind="style : {color : testValue() < 0 ? 'red' : 'blue'}">
css bind
</div>
    <script>
var viewModel = {
testValue : ko.observable(1)
};
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

view会随着监控属性的变化自动添加或者删除该元素的style值。

6.attr绑定

    <div id="myview" data-bind="attr : {title : titleName}">
</div>
    <script>
var viewModel = {
titleName : ko.observable("attr bind")
};
var el = document.getElementById('myview');
ko.applyBindings(viewModel,el);
</script>

7.click绑定

    <div data-bind="text : clickCount">
</div>
<button data-bind="click : clickFunc">click me</button>
    <script>
var viewModel = {
clickCount : ko.observable(0),
clickFunc : function(){
var value = this.clickCount();
this.clickCount(value+1);
}
};
ko.applyBindings(viewModel);
</script>

注意:

(1)默认情况下,knockout会阻止默认事件的执行,例如,当你点击一个a元素,它在执行完viewModel的自定义事件后不会连接到href地址。如果想继续执行默认事件,可在click的自定义函数里返回true。

(2)默认情况下,knockout允许click事件继续往更高层的事件句柄上冒泡执行,例如:

    <div data-bind="click : clickDiv">
<button data-bind="click : clickButton,clickBubble : false">click</button>
</div> <script>
var viewModel = {
clickDiv : function(){
alert('click div');
},
clickButton : function(){
alert('click button');
}
};
ko.applyBindings(viewModel);
</script>

一旦设置了clickBubble为false时,则会阻止冒泡。

8.event绑定

    <div data-bind="event : {mouseover : show,mouseout : hide}">
mouse over me
</div>
<div data-bind="visible : isVisible">
mouse over bind
</div>
<script>
var viewModel = {
isVisible : ko.observable(false),
show :function(){
this.isVisible(true);
},
hide : function(){
this.isVisible(false);
}
};
ko.applyBindings(viewModel);
</script>

注意:event绑定也和click绑定一样,默认情况下,knockout会阻止默认事件的执行,在自定义函数里返回true可继续执行默认事件,knockout同样会允许事件冒泡,设置mouseoverBubble为false可阻止事件冒泡,其他事件类似。

 9.submit绑定

knockout会吧整个form表单元素传递到自定义函数中

    <form data-bind="submit : submitHandle">
form bind..........
<button type="submit">submit</button>
</form>
<script>
var viewModel = {
submitHandle : function(formElement){
//to do...
}
};
ko.applyBindings(viewModel);
</script>

注意:默认情况下,knockout会阻止form表单的默认submit动作,即浏览器不会提交表单到服务器,而是只会执行你的submit句柄,如果想继续执行form表单的submit操作,可在句柄里返回true。

10.enable、disable绑定

enable、disabled绑定使DOM元素只有在参数值为 true的时候才enabled、disabled。

11.value绑定

关联dom元素的值到viewModel上。

例如:用户在编辑表单控件的时候,viewModel属性会自动更新,同样viewModel的属性更新的时候,页面上的值也会随之更新。

    <input data-bind="value : name">
<script>
var viewModel = {
name : ko.observable("123")
};
ko.applyBindings(viewModel);
</script>

valueUpdate参数:

  "change"(默认值) : 失去焦点或者select元素被选中的时候更新viewModel;

  "keyup" : 用户在敲完一个字符后立即更新viewModel;

  "keypress" : 按下键盘时开始更新viewModel;

  "afterkeydown" : 用户开始输入字符时就开始更新viewModel;

例如

<input data-bind="value : name,'valueUpdate' : keyup">

注意:knockout对下拉菜单drop-down list(如select)做value绑定时,这个值可以是任意js对象,而不必非是字符串。

12.checked绑定

checked绑定时关联到checkbox(<input type="checkbox">)或者radio button(<input type="radio">);

    <input type="checkbox" data-bind="checked : isCheck">
<script>
var viewModel = {
isCheck : ko.observable(true)
};
ko.applyBindings(viewModel);
</script>

checkbox 关联到数组:

当参数是一个数组的时候,如果元素的值(value)存在于数组,ko将设置元素为checked,否则设置为unchecked,反之,如果用户对元素进行checked或者unchecked,KO就会将元素的值添加进数组或者从数组中删除。

    <div>
<input type="checkbox" value="one" data-bind="checked : isCheck">
</div>
<div>
<input type="checkbox" value="two" data-bind="checked : isCheck">
</div>
<div>
<input type="checkbox" value="three" data-bind="checked : isCheck">
</div> <script>
var viewModel = {
isCheck : ko.observableArray(["one","two"])
};
ko.applyBindings(viewModel);
</script>

radio:

    <div>
<input type="radio" name="group" value="one" data-bind="checked : isCheck">
</div>
<div>
<input type="radio" name="group" value="two" data-bind="checked : isCheck">
</div>
<div>
<input type="radio" name="group" value="three" data-bind="checked : isCheck">
</div> <script>
var viewModel = {
isCheck : ko.observable("three")
};
ko.applyBindings(viewModel);
</script>

13.options绑定

options绑定控制什么样的options在drop-down列表里(如select或者multi-select),并且不能用于select之外的元素,关联的数据时数组(observable数组);

    <select data-bind="options : name"></select>

    <script>
var viewModel = {
name : ko.observableArray(['tom','jim','jack'])
};
ko.applyBindings(viewModel);
</script>

注意:如果想要设置或者获取select列表的值应用value绑定,对于multi-select用selectedOptions绑定。

drop-down列表里可以是任意的javascript对象,不仅是字符串:

    <select data-bind="options : persons,optionsText : function(item){
return item.name + ' age : ' + item.age},value : selectedPerson,optionsCaption : 'choosen...'"></select>
    <script>
var Person = function(name,age){
this.name = name;
this.age = age;
};
var viewModel = {
persons : ko.observableArray([
new Person('Tom',23),
new Person('jerry',24),
new Person('jack',25),
new Person('james',26)
]),
selectedPerson : ko.observable()
};
ko.applyBindings(viewModel);
</script>

该参数是一个observa数组,对于每一个item,ko都会将它们作为一个option添加到select里,之前的options都会被删除。

参数:

optionsCaption:drop-down列表里默认选择的项目,它的值是字符串类型的,value为undefined。

例如:

<select data-bind='options: myOptions, optionsCaption: "Select an item...", value: myChosenValue'></select>

如果myChosenValue为undefined,那么默认项就会被选中。

optionsText : drop-dwon列表里显示的文本;

optionsValue : 和optionsText类似, 你也可以通过额外参数optionsValue来声明对象的那个属性值作为该<option>的value值。

经典场景:如在更新options的时候想保留原来的已经选择的项。例如,当你重复多次调用Ajax获取car列表的时候,你要确保已经选择的某个car一直都是被选择上,那你就需要设置optionsValue为“carId”或者其它的unique标示符,否则的话KO找不知道

之前选择的car是新options里的哪一项。

【Knockout】三、data-bind声明式绑定的更多相关文章

  1. 【Dalston】【第三章】声明式服务调用(Feign)

    当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻.那 ...

  2. 学习Struts框架系列(三):声明式异常处理

    在Struts1.X的版本中加入了对异常的处理Exception Handler,有了它我们可以不使用try/catch捕获异常,一旦出现了我们已经定义的异常,那么就会转到相应的页面,并且携带异常信息 ...

  3. knockoutjs data-bind 声明式绑定整理

    一.Visible绑定 1.功能 Visible绑定通过绑定一个值来确定DOM元素显示或隐藏 2.示例 <div data-bind="visible: shouldShowMessa ...

  4. (三)Fegin声明式服务调用

    上一篇,讲了SpringClound中的消费者采用Ribbon+Rest来实现,这回我们用组件Feign来实现服务的消费者,Fegin中也是默认集成了Ribbon的;和Eureka结合也能实现负载均衡 ...

  5. 【spring 7】spring和Hibernate的整合:声明式事务

    一.声明式事务简介 Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者 ...

  6. SpringCloud之声明式服务调用 Feign(三)

    一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样.我们知道,阿里巴巴的doubbo采 ...

  7. Spring Cloud 入门Eureka -Consumer服务消费(声明式Feign)(三)

    Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接 ...

  8. Spring:(三) --常见数据源及声明式事务配置

    Spring自带了一组数据访问框架,集成了多种数据访问技术.无论我们是直接通过 JDBC 还是像Hibernate或Mybatis那样的框架实现数据持久化,Spring都可以为我们消除持久化代码中那些 ...

  9. Spring Data JPA系列4——Spring声明式数事务处理与多数据源支持

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第四篇了,先来回顾下前面三篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

随机推荐

  1. Java学习笔记(八):集合类

    Java中对数据的存储会使用到集合类,下面我们来看看Java中常用的集合类. Collection接口 集合的接口,可以简单的理解为可以动态扩充的数组. Collection接口定义了很多相关的方法, ...

  2. [Windows驱动开发](二)基础知识——数据结构

    本节主要介绍驱动开发的一些基础知识. 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象 // WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯 ...

  3. AOE关键路径

    这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间. 从而算出活动最早开始的时间和最晚开始的时间,如果这两个时间相等,则为关键路径. 时间复杂度为O ...

  4. CDOJ 1251 谕神的密码 贪心

    谕神的密码 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1251 Descr ...

  5. hdu 5428 The Factor 分解质因数

    The Factor  Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest ...

  6. delphi 动态建立WebBrower

    //Delphi动态建立WebBrowerunit Main;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphi ...

  7. Java 装饰模式 (Decorator)

    装饰模式 动态的将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的取代方案 代码 package gx.component; /** * 组件:装饰类和被装饰类 都要继承:为了类型保持一致 ...

  8. Android Studio升级后projectBuild failed.

    近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...

  9. 关于Android与pc通信时中文乱码的分析和解决

    初步实现了Android与pc服务器的通信之后,又碰到了传说中令人头疼不已的中文乱码问题.既然出现了乱码,那么原因自然是协议不通了.我们知道eclipse中默认的编码标准是GBK,而安卓程序开发所默认 ...

  10. [Angular 2] Create Shareable Angular 2 Components

    Components that you use across multiple applications need to follow a module pattern that keeps them ...