关于敲除js和价值变化的数据绑定

时间:2013-11-20 08:54:40

标签: knockout.js

这里有两个文本框和一个span由knockout绑定。我得到的例子很容易理解。这是代码。

<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>

var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);

    this.fullName = ko.computed(function() {
        // Knockout tracks dependencies automatically. It knows that fullName depends on firstName and lastName, because these get called when evaluating fullName.
        return this.firstName() + " " + this.lastName();
    }, this);
};

ko.applyBindings(new ViewModel("Planet", "Earth")); 

当代码运行反映的任何传递值但是当我更改一个文本框值时,更改的数据不会在keyup发生时立即反映,但是当焦点更改时,更改的数据会反映在span中。因此,如果我想更改密钥的数据,那么请指导我,然后我需要在代码中进行更改。感谢

2 个答案:

答案 0 :(得分:3)

您应该使用valueUpdate绑定:

<p>First name: <input data-bind="value: firstName, valueUpdate: 'keyup'" /></p>
<p>Last name: <input data-bind="value: lastName, valueUpdate: 'keyup'" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>

以下是文档的链接:http://knockoutjs.com/documentation/value-binding.html

答案 1 :(得分:2)

您可以在数据绑定中传递额外的值valueUpdate

  
      
  • valueUpdate
  •   
     

如果你的绑定还包含一个名为valueUpdate的参数,那么这个   定义KO应该用来检测更改的其他浏览器事件   除了改变事件。以下字符串值最多   通常有用的选择:

     
      
  • “keyup” - 在用户释放密钥时更新您的视图模型
  •   
  • “keypress” - 在用户键入密钥时更新您的视图模型。   与keyup不同,这会在用户按住键时重复更新
  •   
  • “afterkeydown” - 在用户开始时立即更新您的视图模型   输入一个字符。这可以通过捕获浏览器的keydown事件来实现   并异步处理事件。
  •   
     

这些选项中,   如果你想保留你的视图模型,“afterkeydown”是最好的选择   实时更新。

来自http://knockoutjs.com/documentation/value-binding.html

所以你的绑定将是:

<p>First name: <input data-bind="value: firstName, valueUpdate: 'keyup'" /></p>
<p>Last name: <input data-bind="value: lastName, valueUpdate: 'keyup'" /></p>