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>元素
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
源码:
<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绑定,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定,包括了KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定的使用技巧和注意事项,需要的朋友参考一下 Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库。任何时候
本文向大家介绍KnockoutJS 3.X API 第四章之click绑定,包括了KnockoutJS 3.X API 第四章之click绑定的使用技巧和注意事项,需要的朋友参考一下 目的 click绑定主要作用是用于DOM元素被点击时调用相关JS函数。最常见用于button、input、a元素。 例如: 源码: 如上述例子,没点过button被点击时都会触发incrementClickCount
本文向大家介绍KnockoutJS 3.X API 第四章之事件event绑定,包括了KnockoutJS 3.X API 第四章之事件event绑定的使用技巧和注意事项,需要的朋友参考一下 目的 event绑定即为事件绑定,即当触发相关DOM事件的时候回调函数。例如keypress,mouseover或者mouseout等 例如: Mouse over me 源码: 如上述例子,当鼠标指针移入或
有些人类的工作需要伪装起来。有时候伪装的目的是欺骗,但更多的时候,伪装的目的是 为了在更深层次做一些真实的通讯。比如,许多面试官希望你能穿西服打领带以表示你对 工作是认真的,即使你们俩都知道你可能在工作的时候永远不会打领带。你思考这件事的 时候可能会觉得很奇怪:在你脖子上系一块布会神奇地帮你找到工作。在 Perl 文化里, tie 操作符起到类似的作用的角色:它让你创建一个看起来象普通变量的变量,
几乎所有面向对象的程序中,总有一两个资源被创建出来,在程序应用中持续被共享使用。例如,这样的一个资源,在一个电子商务程序的数据库连接中使用:这个连接在应用程序启动时初始化,程序于是可以有效的执行;当程序结束时,这个连接最终被断开并销毁。如果是你写的代码,没必要在每时每刻创建一个数据库连接,这样非常低效。已经建立好的连接应该能被你的代码简单重复的使用。这个问题就是,基于以上要求你将如何进行这个数据库
本文向大家介绍KnockoutJS 3.X API 第四章之数据控制流foreach绑定,包括了KnockoutJS 3.X API 第四章之数据控制流foreach绑定的使用技巧和注意事项,需要的朋友参考一下 foreach绑定 foreach绑定主要用于循环展示监控数组属性中的每一个元素,一般用于table标签中 假设你有一个监控属性数组,每当您添加,删除或重新排序数组项时,绑定将有效地更新U