启用与多个布尔可观察标志的绑定
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}
之类的函数来完成这项工作。但它不起作用:当我使用按钮更改状态时它不观察。
因为 flagA
和 flagB
是可观察对象(它们是函数),如果您在表达式中使用它们,则需要在不带任何参数的情况下调用它们以获取值:
<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' />
正在尝试使用基于两个标志的数据绑定来绑定启用状态。如果 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}
之类的函数来完成这项工作。但它不起作用:当我使用按钮更改状态时它不观察。
因为 flagA
和 flagB
是可观察对象(它们是函数),如果您在表达式中使用它们,则需要在不带任何参数的情况下调用它们以获取值:
<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' />