Knockout.js 编辑输入后,更新其值属性绑定到可观察对象的输入

Knockout.js 编辑输入后,更新其值属性绑定到可观察对象的输入,knockout.js,Knockout.js,我有一些带有敲除绑定的HTML,可以将值x显示为input的值和p标记中的文本 <p data-bind="text: x"></p> <p><input id="x" data-bind="attr: {value: x}"></p> <button id="update">Update</button> 加载时,1的初始值将显示在两个位置。如果将输入中的值更改为2,并单击“更新”按钮,则两个位置都将显示2

我有一些带有敲除绑定的HTML,可以将值
x
显示为
input
的值和
p
标记中的文本

<p data-bind="text: x"></p>
<p><input id="x" data-bind="attr: {value: x}"></p>
<button id="update">Update</button>

加载时,
1
的初始值将显示在两个位置。如果将
输入中的值更改为
2
,并单击“更新”按钮,则两个位置都将显示
2
。精彩的。这适用于任何整数

现在尝试一些不是整数的东西。输入
5.3
并按“更新”。
p
正确更新为显示
5
,但
输入仍然显示
5.3


似乎表明Knockout乐于更新
输入
,直到我手动编辑
输入
中的值,此时它停止对
输入
执行任何操作。我可以理解为什么这在某些情况下可能是可取的,以防止用户输入被覆盖。。。但这不是我想要的行为。更新视图模型时,如何让它同时更新两个显示的值?

如果您将小提琴更改为使用
data bind=“value:x”
intead of
data bind=“attr:{value:x}”
它将非常有效

是的,只要看看文件就行了。
绑定是双向的,而
attr
绑定是单向的。换句话说,
value
将更新附加的可观察对象并从附加的可观察对象读取值,而
attr
绑定只是从可观察对象读取值。我不知道!谢谢。这并不是我想要的,因为在按下Submit按钮之前,它会用表单字段中的任何内容更新基础视图模型,但是已经足够近了。似乎可以像这样解决这个问题,但可能会非常混乱。
var vm = {
    x: ko.observable(1)
};

ko.applyBindings(vm);

$('#update').click(function () {
    vm.x(Math.round($('#x').val()));
});