敲除:如何对两个数字输入进行双向绑定

Knockout: How to do a two-way binding for two number inputs

本文关键字:数字输入 两个 绑定 敲除      更新时间:2023-09-26

我最近刚拿起KO,想做一些类似于下面的事情。

有两个输入,它们相互改变。

.HTML:

<input data-bind="value: var1" type="text">
<input data-bind-"value: var2" type="text">

脚本:

function DataViewModel() {
        var self = this;
        self.price = 5;
        self.var1 = ko.observable(0);
        self.var2 = ko.computed({
            read: function () {
                if(self.var1() <= 0) {
                    return 0;
                }
                return (self.var1 - 1) / self.price;
            },
            write: function (value) {
                self.var1((Number(value) + 1) * self.price); 
                // Value = 7.8, output is 44 for var1,
                // var2 changes to 8.6. Desired is 40 for var1 and 7.8 for var2.
            },
            owner: self
        });
    }
ko.applyBindings(new DataViewModel());

当 40 输入到 var1 中时,var2 显示 7.8。但是当 7.8 输入到 var2 中时,var1 更新为 44 而不是 40,var2 更改为 8.6。

我希望 var2 保留输入的内容,而不是经历读取功能。

http://jsfiddle.net/tyq7ejdh/2/

此表达式不正确

   write: function (value) {
                self.var1((value+1) * self.price);
            },

尝试像这样更新

   write: function (value) {
                self.var1((value * self.price) + 1);
            },

小提琴