我如何知道通过Knockout.js的输入绑定是否改变了可观察量?

时间:2015-04-23 16:02:03

标签: knockout.js

我想实现一个功能,根据其他两个字段的值自动填充字段,但允许用户覆盖计算的建议值。例如:

输入1:_________

输入2:_________

输入3:默认输入1 /输入2

我希望每当输入1或2更改时更新输入3,但如果用户明确更改了其值,我不想更改输入3。现在,如何通知用户输入(或拖动或粘贴)导致输入3已更改,而不是由于输入1和2更改时代码更新后的输入?

1 个答案:

答案 0 :(得分:4)

解决方案是使用writable computed observables

Link to working sample

HTML:

Value 1: <input type="number" data-bind='value: value1' />
<br/>
Value 2: <input type="number" data-bind='value: value2' />
<br/>
Value 3: <input type="number" data-bind='value: value3Computed' />
<br/>

JavaScript的:

function MyViewModel() {
    this.value1 = ko.observable(1);
    this.value2 = ko.observable(2);
    this.value3 = ko.observable(null);

    this.value3Computed = ko.computed({
        read: function () {
            return this.value3() || this.value1() / this.value2();
        },
        write: function (value) {
            this.value3(value);
        },
        owner: this
    });
}
var vm = new MyViewModel();
ko.applyBindings(vm);
相关问题