这里有两个文本框和一个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中。因此,如果我想更改密钥的数据,那么请指导我,然后我需要在代码中进行更改。感谢
答案 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>