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 相关文章推荐
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
angular过滤器实现排序功能
Jun 27 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
Vue侧滑菜单组件——DrawerLayout
Dec 18 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
vue2.0获取鼠标位置的方法
Sep 13 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
php getsiteurl()函数
2009/09/05 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Unicode和Python的中文处理
2017/03/19 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
python程序如何进行保存
2020/07/03 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
详解如何修改python中字典的键和值
2020/09/29 Python
共产党员岗位承诺书
2014/05/29 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python