“hasFocus”绑定

hasFocus绑定器会将DOM元素的焦点状态与视图模型中的属性相关联,当你设置视图模型中关联的属性为true或false后,将能够设置关键的DOM元素是否获得焦点。

比如下面的例子将会演示如何使用通过代码设置焦点,并且当关联的标签获得焦点后显示一段文本:

 <div>
<input type="text" data-bind="hasfocus: focusState" />
<button type="button" data-bind="click:setFocus" >set focus</button>
<span data-bind="visible:focusState" >the text box has focus</span>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.focusState = ko.observable(false);
this.setFocus = function () {
self.focusState(true);
};
} ko.applyBindings(new appViewModel());
</script>

“checked”绑定

“checked”绑定器用来关联checkable表单控件,比如复选框和单选框。

比如下面的列子可以判断用户是否勾选了这个复选框:

 <div>
<input type="checkbox" data-bind="checked: isChecked" />
</div>
<div>
<button type="button" data-bind="click:setFocus">勾选</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.isChecked = ko.observable(false);
this.setFocus = function () {
self.isChecked(true);
};
} ko.applyBindings(new appViewModel());
</script>

再复杂些就是可以将用户勾选的值组成数组,比如下面的例子:

 <div>
<input type="checkbox" value="a" data-bind="checked: CheckArray" />
<input type="checkbox" value="b" data-bind="checked:CheckArray" />
<input type="checkbox" value="c" data-bind="checked:CheckArray" />
</div>
<div>
<button type="button" data-bind="click:showChecked">show checked</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.CheckArray = ko.observableArray(['a','b']);
this.showChecked = function () {
alert(self.CheckArray().toString());
};
} ko.applyBindings(new appViewModel());
</script>

当然不仅仅只有复选,在单选的情况下只会将选择的元素的value值更新到视图模型中去,比如下面的例子所示:

 <div>
<input type="radio" name="1" value="a" data-bind="checked: CheckEle" />
<input type="radio" name="1" value="b" data-bind="checked: CheckEle" />
<input type="radio" name="1" value="c" data-bind="checked: CheckEle" />
</div>
<div>
<button type="button" data-bind="click:showChecked">show checked</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.CheckEle = ko.observable('a');
this.showChecked = function () {
alert(self.CheckEle());
};
} ko.applyBindings(new appViewModel());
</script>

如果你不想用value那个值,可以加上checkedValue属性,这样更新到视图模型中的值就是checkedValue指定的值。比如下面这样:

 <div>
<input type="radio" name="1" value="a" data-bind="checkedValue:'s', checked: CheckEle" />
<input type="radio" name="1" value="b" data-bind="checkedValue: 'd', checked: CheckEle" />
<input type="radio" name="1" value="c" data-bind="checkedValue: 'e', checked: CheckEle" />
</div>
<div>
<button type="button" data-bind="click:showChecked">show checked</button>
</div>

“options”绑定

“options”绑定器控制在下拉列表中显示的项,比如<select>单选或者<select size=’6’ >多选,但是该绑定器不能在除了<select>标签使用。

指定关联的值必须是一个数组或者监控数组,ko会将这些数组中的项作为<select>的option显示。

比如下面的例子,会将数组中的值全部显示,同时我们还可以在此之后增加新的值到数组中,ko一样会更新:

 <div>
<select data-bind="options:dropOptions" ></select>
</div>
<div>
<input type="text" data-bind="value:newOption" />
<button type="button" data-bind="click: addNewOptions">add new item</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.dropOptions = ko.observableArray(['a', 'b', 'c', 'd']);
this.newOption = ko.observable();
this.addNewOptions = function () {
self.dropOptions.push(self.newOption());
self.newOption('');
}
} ko.applyBindings(new appViewModel());
</script>

当然对于多选也一样可以应付:

 <div>
<select size="3" multiple="multiple" data-bind="options:dropOptions" ></select>
</div>

当然一定会有人问如何获取选择的项,这里我们可以用value绑定器,比如下面的代码将第一个例子改写,能够显示选择的值:

 <div>
<select data-bind="options:dropOptions,value:selectedOption" ></select>
</div>
<div>
<input type="text" data-bind="value:newOption" />
<button type="button" data-bind="click: addNewOptions">add new item</button>
<button type="button" data-bind="click: showSelectOption">show selected value</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.dropOptions = ko.observableArray(['a', 'b', 'c', 'd']);
this.newOption = ko.observable();
this.selectedOption = ko.observable();
this.addNewOptions = function () {
self.dropOptions.push(self.newOption());
self.newOption('');
},
this.showSelectOption = function () {
alert(self.selectedOption());
}
} ko.applyBindings(new appViewModel());
</script>

如果是多选我们可以将value关联的属性改成监控数组,那么就可以解决这个问题了,但是上面仅仅只是简单的数组,实际的开发过程中可能是一个对象组成的数组,而我们也要将其显示到下拉中,当然options绑定一样可以办到,比如下面的例子:

 <div>
<select data-bind="options:dropOptions,value:selectedOption,optionsCaption:'choose...',optionsText:'text',optionsValue:'value'" ></select>
</div>
<div>
<button type="button" data-bind="click: showSelectOption">show selected value</button>
</div> <script type="text/javascript">
var ObjectArray = function (text, value) {
this.text = text;
this.value = value;
} var appViewModel = function () {
var self = this;
this.dropOptions = ko.observableArray([new ObjectArray('a', 1), new ObjectArray('b', 2), new ObjectArray('c', 1)]);
this.selectedOption = ko.observable();
this.showSelectOption = function () {
alert(self.selectedOption());
}
} ko.applyBindings(new appViewModel());
</script>

这里我们通过optionsCaption是用来显示提示的,optionsText是用来指定用于作为下拉显示的属性名称,这里我们指定的是text,而optionsValue则是指定用于作为value的属性名称,我们指定的是value,那么当我们选择一项之后,点击显示,则显示的是value的值而不是text的值,当然optionsText也可以传给它一个函数,那么ko会将数组中的当前项作为第一个参数传递给这个函数,当然这个函数也要返回用于显示的文字。

还有一些其他参数如下:

optionsIncludeDestroyed:是否显示数组中已经会设置为删除标记的项,默认是不显示的。

optionsAfterRender:当一个项显示之后调用该函数,可以同来执行一些自定义的方法。

selectedOptions:用于多选的情况,用来关联选择的项。关联到视图模型中的属性类型需要为数组,并且在通过push和pop操作该数组的同时,下拉中选择的项也会跟着变动。

valueAllowUnset:当你指定的value不存在于下拉项中的时候,下拉将显示空白,如果未设置该属性为true则会将value关联的属性设置为undefined,同时下拉会显示optionCaption指定的字符串。

“uniqueName”绑定

这个绑定器很简单,就是用来给name属性生成一个标识符。

Knockout学习之表单绑定器(下)的更多相关文章

  1. Knockout学习之表单绑定器(上)

    表单绑定器 “click”绑定 Click 绑定器可以将javascript函数绑定到指定的dom元素,并且再该元素被点击时将触发绑定的函数,大多数情况下都会使用button.input和a元素,当然 ...

  2. Element Form表单实践(下)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  3. vue基础-动态样式&表单绑定&vue响应式原理

    动态样式 作用:使用声明式变量来控制class和style的值 语法: :class/:style 注意:尽可能不要把动态class和静态class一起使用,原因动态class起作用的时间会比较晚,需 ...

  4. jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法

    jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jq ...

  5. bootstrap基础学习【表单含按钮】(二)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框

    jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...

  7. Vue表单绑定(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  8. Angular5+ 自定义表单验证器

    Angular5+ 自定义表单验证器 Custom Validators 标签(空格分隔): Angular 首先阐述一下遇到的问题: 怎样实现"再次输入密码"的验证(两个cont ...

  9. Spirng MVC +Velocity 表单绑定命令对象

    通常,表单中的数据在提交之后可以通过Spring MVC的@RequestParam注解在控制器函数的参数列表中中提取出来,但是一旦表单数据过多的话,参数列表将会变得非常长,最好的解决方案是将表单中的 ...

随机推荐

  1. jvm垃圾回收原理(转)

    原文链接:jvm垃圾回收原理 在jvm中堆空间划分为三个代:年轻代(Young Generation).年老代(Old Generation)和永久代(Permanent Generation).年轻 ...

  2. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.cpp -- 模型测试

    测试代码.能看到,训练的时候是单个样本.单个样本的训练的,在NN中是属于“stochastic gradient descent”,否则,一批样本在一起的,就是“standard gradient d ...

  3. 用于HTML5移动开发的10大移动APP开发框架【转】

    今天给大家介绍10款有关HTML5移动开发APP开发框架,这几款框架都是比较优秀的移动 Web 开发框架,能够帮助开发者更加高效的开发移动Web应用.. 十款移动APP开发框架: 1.jquery m ...

  4. protobuf Protocol Buffers 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Angular2 -- 生命周期钩子

    组件生命周期钩子 指令和组件的实例有一个生命周期:新建.更新和销毁. 每个接口都有唯一的一个钩子方法,它们的名字是由接口名加上 ng前缀构成的.比如,OnInit接口的钩子方法叫做ngOnInit. ...

  6. Twitter雪花算法 SnowFlake算法 的java实现

    概述 SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序. 原理 Sn ...

  7. em px pt单位介绍及换算

    PX\EM\PT单位介绍 px Pixel单位名称为像素,相对长度单位,像素(px)是相对于显示器屏幕分辨率而言的国内推荐:em单位名称为相对长度单位.相对于当前对象内文本的字体尺寸,国外使用比较多, ...

  8. 老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件

    ios 8 的时间滚轮控件实现了扁平化,带来很好用户体验,android没有现成控件,小弟不才,数学与算法知识不过关,顾十分苦恼,幸好在github上找到sai大神实现代码,甚为欣喜,顾把学习这个控件 ...

  9. Web项目MySQL配置文件运维

    root@mysqltest:/etc/mysql/mysql.conf.d# cat mysqld.cnf # # The MySQL database server configuration f ...

  10. CMenu and Dialog-based applications

    [问] Is it possible to put a menu in a dialog based application? How? [答] Yes, it is possible to add ...