启用与多个布尔可观察标志的绑定

Enable binding with multiple boolean observable flags

正在尝试使用基于两个标志的数据绑定来绑定启用状态。如果 flagA 为真且 flagB 为假,我们需要启用输入框。

var viewModel = function () {
    var self = this;
    self.flagA = ko.observable(true);
    self.flagB = ko.observable(false);
    self.changeState = function () {
        self.flagA(false);
    }
}
 
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input type='text' data-bind='enable: flagA && !flagB' />
<button data-bind='click:changeState'>changeState</button>

谁能帮我找出为什么它不起作用?

我试过使用 enable:function(){flagA && !flagB} 之类的函数来完成这项工作。但它不起作用:当我使用按钮更改状态时它不观察。

因为 flagAflagB 是可观察对象(它们是函数),如果您在表达式中使用它们,则需要在不带任何参数的情况下调用它们以获取值:

<input type='text' data-bind='enable: flagA() && !flagB()' />

演示 JSFiddle.

尽量避免在您的视图中加入逻辑,这是一种不好的做法。为此,添加 computed 变量

self.isEnabled = ko.computed(function() {
        return this.flagA() && !this.flagB()
    }, this);

并照常绑定:

<input type='text' data-bind='enable: isEnabled' />

fiddle