由于一些内部原因,我需要将AngularJS应用程序转换为KnockoutJS,所以最近我开始玩Knockout。
我首先注意到的是,与Angular的绑定是即时的,就像一个接一个的char:http://jsfiddle.net/anvarik/3cnV9/
<div ng-app ng-controller="MainCtrl">
<p>First Name: {{first}}</p>
<p>Last Name: {{second}}</p>
<p>First Name: <input ng-model="first" /> </p>
<p>Last Name: <input ng-model="second" /> </p>
</div>
另一方面,Knockout获取整个输入并在末尾绑定:http://jsfiddle.net/anvarik/CxBy9/
<div>
<p>First Name: <strong data-bind="text:firstName"></strong></p>
<p>Last Name: <strong data-bind="text:lastName"></strong></p>
<p>First Name: <input data-bind="value:firstName"/> </p>
<p>Last Name: <input data-bind="value:lastName"/> </p>
</div>
如果有人能向我解释背后的原因,我会很高兴。我想像在Angular中那样在Knockout中进行绑定,如何做到这一点?
您需要在knockout中再添加一个选项(valueUpdate选项),以具有与angular中相同的行为。示例:
<input data-bind="value: someValue, valueUpdate: 'afterkeydown'" />
默认情况下,值在"更改"事件时更新。请参阅文档:knockoutjs.com/documentation/value-binding.html