KnockoutJS 3.X API 第四章之表单value绑定


Posted in Javascript onOctober 10, 2016

Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库。任何时候如果你的UI需要自动更新(比如:更新依赖于用户的行为或者外部数据源的改变),KO能够很简单的帮你实现并且很容易维护。

重要特性:

优雅的依赖追踪 - 不管任何时候你的数据模型更新,都会自动更新相应的内容。

声明式绑定 - 浅显易懂的方式将你的用户界面指定部分关联到你的数据模型上。

轻易可扩展 - 几行代码就可以实现自定义行为作为新的声明式绑定。

额外的好处:

纯JavaScript类库 ? 兼容任何服务器端和客户端技术

可添加到Web程序最上部 ? 不需要大的架构改变

简洁的 - Gzip之前大约25kb

兼容任何主流浏览器 - (IE 6+、Firefox 2+、Chrome、Safari、其它)

采用行为驱动开发 - 意味着在新的浏览器和平台上可以很容易通过验证。

目的

value绑定主要用于DOM元素给视图模型赋值用的。通常用于<input><select><textarea>等元素。

value绑定与text绑定的区别在于,value绑定中当用户编辑表单控件相关值的时候,值会自动更新视图模型的相关属性值,当视图模型的相关属性值被更新后,表单中相关的value绑定也会随之变化。

value绑定就像DOM和ViewModel的一个双向通道。而text绑定只是ViewModel到DOM的单向通道。

例如:

<p>Login name: <input data-bind="value: userName" /></p>
<p>Password: <input type="password" data-bind="value: userPassword" /></p>
<script type="text/javascript">
var viewModel = {
userName: ko.observable(""), // Initially blank
userPassword: ko.observable("abc"), // Prepopulate
};
</script>

一些细节

主要技术细节:

KO将会使用初始值设置value绑定的元素。当有新的值的时候,初始值将被覆盖
如果value绑定的是监控属性,那么之后的属性值更新就会被体现在DOM的value绑定上,如果不是监控属性,则只有第一次运行会更新DOM上的value绑定的值,之后就不会再变了。

如果你的value绑定不是数值型或字符型数据(例如一个对象或数组),那显示的文本内容将等同于yourParameter.toString()。最好还是绑定值型或字符型数据。

当用户编辑表单控件修改基于value绑定的元素值并移出焦点后,KO就会自动更新对应的视图模型的属性值,你也可以通过使用valueUpdate事件来控制。

其他技术细节:

valueUpdate,KO定义了一系列的change事件,最常用包括如下事件:

"input"-<input>或<textarea>元素的变化更新您的视图模型时的值。

"keyup" - 当用户释放某个键更新您的视图模型

"keypress"-当用户输入一个值更新您的视图模型。不像keyup,这个会反复更新

"afterkeydown"-当用户开始输入一个字符尽快更新您的视图模型。这通过捕获浏览器的keydown事件,并异步处理该事件。这

个事件在一些移动客户端可能不会起什么作用。

valueAllowUnset,适用于<select>的value绑定,其他元素不起作用,具体请参考之后的备注2.

备注1:实时更新

如果你想要实时更新<input>或者<textarea>到你的视图模型,可以使用textInput绑定。具体的textInput细节将在之后的章节提到。

备注2:下拉列表<select>的绑定

KO在下拉列表绑定中,需要使用value绑定和options绑定(options绑定将在以后的章节中提到)。

使用valueAllowUnset与<select>元素

KnockoutJS 3.X API 第四章之表单value绑定

Select a country:

源码:

<p>
Select a country:
<select data-bind="options: countries,
optionsCaption: 'Choose one...',
value: selectedCountry,
valueAllowUnset: true"></select>
</p>
<script type="text/javascript">
var viewModel = {
countries: ['Japan', 'Bolivia', 'New Zealand'],
selectedCountry: ko.observable('Latvia')
};
</script>

有很多时候,我们希望下拉列表中包含一个空白的或者没有包含在数据集合中的元素,比如choose one…,那么就可以使用valueAllowUnset:true来带到目的。如上述例子一样。

selectedCountry将保留Latvia,并将下拉列表中空白匹配给它。

备注3:绑定监控属性和非监控属性

如果你使用value绑定的是一个监控属性,KO是能够建立一个双向绑定。

但是如果value绑定是一个非监控属性,则KO会进行以下处理:

如果引用一个简单的属性,也就是说,它只是在你的视图模型一个普通的属性,表单元素编辑时KO将设置表单元素的初始状态属性值。

例如:

First value:
hello
First value:hello
Second value:
hello, again
Second value: hello, again
Third value:
true

KnockoutJS 3.X API 第四章之表单value绑定

源码:

<p>First value: <input data-bind="value: firstValue"></p>
<p>First value:<span data-bind="text:firstValue"></span></p>
<!-- One-way binding. Populates textbox; syncs only from textbox to model. -->
<p>Second value: <input data-bind="value: secondValue"></p>
<p>Second value: <span data-bind="text: secondValue"></span></p>
<!-- No binding. Populates textbox, but doesn't react to any changes. -->
<p>Third value: <input data-bind="value: secondValue.length > 8"></p>
<script type="text/javascript">
var viewModel = {
firstValue: ko.observable("hello"), // Observable
secondValue: "hello, again" // Not observable
};
ko.applybindings(viewModel,document.getElementById("eq2"));
</script>

以上所述是小编给大家介绍的KnockoutJS 3.X API 第四章之表单value绑定,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
js去除空格的12种实用方法
Nov 08 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
JavaScript生成随机字符串的方法
Mar 19 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
原生js实现倒计时--2018
Feb 21 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
微信小程序搭建自己的Https服务器
May 02 Javascript
js canvas实现5张图片合成一张图片
Jul 15 Javascript
vue模块移动组件的实现示例
May 20 Javascript
js实现简单音乐播放器
Jun 30 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 #Javascript
浅谈jquery中使用canvas的问题
Oct 10 #Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 #Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 #Javascript
js监听键盘事件的方法_原生和jquery的区别详解
Oct 10 #Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 #Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 #Javascript
You might like
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python的re正则表达式实例代码
2018/01/24 Python
python SVM 线性分类模型的实现
2019/07/19 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Pygame框架实现飞机大战
2020/08/07 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
html5 标签
2009/07/16 HTML / CSS
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
关于元旦的广播稿
2014/02/16 职场文书
刊首寄语大全
2014/04/11 职场文书
学习普通话的体会
2014/11/07 职场文书
2014年党建工作总结
2014/11/11 职场文书
委托培训协议书
2014/11/17 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript