Knockout学习之表单绑定器(下)

“hasFocus”绑定

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

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

 1 <div>
 2     <input type="text" data-bind="hasfocus: focusState" />
 3     <button type="button" data-bind="click:setFocus" >set focus</button>
 4     <span data-bind="visible:focusState" >the text box has focus</span>
 5 </div>
 6
 7
 8     <script type="text/javascript">
 9
10         var appViewModel = function () {
11             var self = this;
12             this.focusState = ko.observable(false);
13             this.setFocus = function () {
14                 self.focusState(true);
15             };
16         }
17
18         ko.applyBindings(new appViewModel());
19     </script>

“checked”绑定

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

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

 1 <div>
 2     <input type="checkbox" data-bind="checked: isChecked" />
 3 </div>
 4 <div>
 5     <button type="button" data-bind="click:setFocus">勾选</button>
 6 </div>
 7
 8
 9     <script type="text/javascript">
10
11         var appViewModel = function () {
12             var self = this;
13             this.isChecked = ko.observable(false);
14             this.setFocus = function () {
15                 self.isChecked(true);
16             };
17         }
18
19         ko.applyBindings(new appViewModel());
20     </script>

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

 1 <div>
 2     <input type="checkbox" value="a" data-bind="checked: CheckArray" />
 3     <input type="checkbox" value="b" data-bind="checked:CheckArray" />
 4     <input type="checkbox" value="c" data-bind="checked:CheckArray" />
 5 </div>
 6 <div>
 7     <button type="button" data-bind="click:showChecked">show checked</button>
 8 </div>
 9
10
11     <script type="text/javascript">
12
13         var appViewModel = function () {
14             var self = this;
15             this.CheckArray = ko.observableArray([‘a‘,‘b‘]);
16             this.showChecked = function () {
17                 alert(self.CheckArray().toString());
18             };
19         }
20
21         ko.applyBindings(new appViewModel());
22     </script>

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

 1 <div>
 2     <input type="radio" name="1" value="a" data-bind="checked: CheckEle" />
 3     <input type="radio" name="1" value="b" data-bind="checked: CheckEle" />
 4     <input type="radio" name="1" value="c" data-bind="checked: CheckEle" />
 5 </div>
 6 <div>
 7     <button type="button" data-bind="click:showChecked">show checked</button>
 8 </div>
 9
10
11     <script type="text/javascript">
12
13         var appViewModel = function () {
14             var self = this;
15             this.CheckEle = ko.observable(‘a‘);
16             this.showChecked = function () {
17                 alert(self.CheckEle());
18             };
19         }
20
21         ko.applyBindings(new appViewModel());
22     </script>

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

1 <div>
2     <input type="radio" name="1" value="a" data-bind="checkedValue:‘s‘, checked: CheckEle" />
3     <input type="radio" name="1" value="b" data-bind="checkedValue: ‘d‘, checked: CheckEle" />
4     <input type="radio" name="1" value="c" data-bind="checkedValue: ‘e‘, checked: CheckEle" />
5 </div>
6 <div>
7     <button type="button" data-bind="click:showChecked">show checked</button>
8 </div>

“options”绑定

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

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

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

 1 <div>
 2     <select data-bind="options:dropOptions" ></select>
 3 </div>
 4 <div>
 5     <input type="text" data-bind="value:newOption" />
 6     <button type="button" data-bind="click: addNewOptions">add new item</button>
 7 </div>
 8
 9
10     <script type="text/javascript">
11
12         var appViewModel = function () {
13             var self = this;
14             this.dropOptions = ko.observableArray([‘a‘, ‘b‘, ‘c‘, ‘d‘]);
15             this.newOption = ko.observable();
16             this.addNewOptions = function () {
17                 self.dropOptions.push(self.newOption());
18                 self.newOption(‘‘);
19             }
20         }
21
22         ko.applyBindings(new appViewModel());
23     </script>

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

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

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

 1 <div>
 2     <select data-bind="options:dropOptions,value:selectedOption" ></select>
 3 </div>
 4 <div>
 5     <input type="text" data-bind="value:newOption" />
 6     <button type="button" data-bind="click: addNewOptions">add new item</button>
 7     <button type="button" data-bind="click: showSelectOption">show selected value</button>
 8 </div>
 9
10
11     <script type="text/javascript">
12
13         var appViewModel = function () {
14             var self = this;
15             this.dropOptions = ko.observableArray([‘a‘, ‘b‘, ‘c‘, ‘d‘]);
16             this.newOption = ko.observable();
17             this.selectedOption = ko.observable();
18             this.addNewOptions = function () {
19                 self.dropOptions.push(self.newOption());
20                 self.newOption(‘‘);
21             },
22             this.showSelectOption = function () {
23                 alert(self.selectedOption());
24             }
25         }
26
27         ko.applyBindings(new appViewModel());
28     </script>

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

 1 <div>
 2     <select data-bind="options:dropOptions,value:selectedOption,optionsCaption:‘choose...‘,optionsText:‘text‘,optionsValue:‘value‘" ></select>
 3 </div>
 4 <div>
 5     <button type="button" data-bind="click: showSelectOption">show selected value</button>
 6 </div>
 7
 8
 9     <script type="text/javascript">
10         var ObjectArray = function (text, value) {
11             this.text = text;
12             this.value = value;
13         }
14
15         var appViewModel = function () {
16             var self = this;
17             this.dropOptions = ko.observableArray([new ObjectArray(‘a‘, 1), new ObjectArray(‘b‘, 2), new ObjectArray(‘c‘, 1)]);
18             this.selectedOption = ko.observable();
19             this.showSelectOption = function () {
20                 alert(self.selectedOption());
21             }
22         }
23
24         ko.applyBindings(new appViewModel());
25     </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学习之表单绑定器(下)

时间: 2024-10-22 17:42:27

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

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

表单绑定器 “click”绑定 Click 绑定器可以将javascript函数绑定到指定的dom元素,并且再该元素被点击时将触发绑定的函数,大多数情况下都会使用button.input和a元素,当然其他可见的dom元素也是一样可以的.下面我们就简单的举一个例子: 1 <div> 2 你已经点击了<span data-bind="text:numberOfClicks" ></span> 3 <button data-bind="cl

第十章 表单元素(下)

第 10章表单元素[下]学习要点:1.其他元素2.输入验证 本章主要探讨 HTML5中表单中剩余的其他元素,然后重点了解一下表单的输入验证功能.一.其他元素表单元素还剩下几个元素没有讲解,包括下拉框列表 select.多行文本框 textarea.和 output计算结果元素. 元素名称 说明select 生成一个下拉列表进行选择optgroup 对 select元素进行编组option select元素中的项目 textarea 生成一个多行文本框output 表示计算结果 1.生成下拉列表<

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

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>bootstrap基础学习[表单](二)</title> <link rel="stylesheet" href="css/bootstrap.min.css" /> </head> <body style="padd

js验证阻止表单提交(表单绑定onsubmit事件)

原始方式: <form action="http://www.cnblogs.com/zixueit/" onsubmit="return check()"> <input type="submit" value="提交" /> </form> <script type="text/javascript"> function check(){ if(!conf

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

jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法 一丶什么是JQuery JQuery: ???????JQuery是js的一个库,高度封装了js常用的功能,提供简便方法,调用简单,提高开发效率 ??????js库是包含了把复杂的功能封装到简单的方法中 JQuery的两大特性: ???????链式编程:可以.的形式实现多个功能 ?

JavaScript表单处理(下)

内容提纲: 1.文本框脚本 2.选择框脚本 发文不易,转载请亲注明链接出处,谢谢!   一.文本框脚本 在HTML中,有两种方式来表现文本框: 一种是单行文本框<input type="text">: 一种是多行文本框<textarea>. 虽然在HTML中<input>有value值,而<textarea>却没有,但在JS中都可以通过value获取他们的值. var textField = fm.elements[0]; var are

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

通常,表单中的数据在提交之后可以通过Spring MVC的@RequestParam注解在控制器函数的参数列表中中提取出来,但是一旦表单数据过多的话,参数列表将会变得非常长,最好的解决方案是将表单中的数据封装到一个自定义的对象中,这样就可以直接用一个命令对象传递整个表单所包含的数据了. 关键字:#springBind宏 没错,这个宏是绑定的关键.首先我们需要开启spring mvc在velocity模板中对宏的支持,这个需要做以下设置: <bean id="viewResolver&quo

Django学习之表单(forms)

我们的博客现在已经实现了博客列表的查看,博客的查看.现在该是我们实现创建和更新博客的时候了. 要实现博客的创建和更新,我们需要学习Django表单的相关知识. 在处理表单的过程中,Django表单功能做了哪些工作呢? 传递数据的准备和重建 为数据创建HTML表单 从客户端接收和处理提交的表单和数据 Django Form类是系统的核心组件.在django中, 模型描述的是一个对象的逻辑架构,这绵行为,它显现给我们的方式.与此类似,Form类描述的是一个表单和决定它是如何工作和显示的. 一个模型类

JavaScript 之表单验证(表单验证器的封装)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html>     <head>         <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>