我在knockout js中有一个输入类型复选框,我想在选中此复选框时执行“not true”操作。像这样:
<input type="checkbox" data-bind="checked: !IsVisible"/>
但这不起作用。 我知道我可以调用IsHidden并设置常见的检查绑定,但我有一个特殊情况,我需要这种行为。
答案 0 :(得分:5)
定义自定义绑定。请参阅“Simplifying and cleaning up views in KnockoutJS”,其中的部分与您要求的部分非常相似。基本上,这样的事情应该有效(注意:未经测试):
ko.bindingHandlers.notChecked = {
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
ko.bindingHandlers.checked.update(element, function() { return!value; });
}
};
然后你可以这样做:
data-bind="notChecked: IsVisible"
答案 1 :(得分:2)
您可以直接在绑定中评估observable,您的想法应该有效。
像这样:<input type="checkbox" data-bind="checked: !IsVisible()"/>
但请注意,这会失去“可观察性”,这可能不是您想要的。
另一种方法是创建一个由IsVisible计算的IsHidden
属性。
var ViewModel = function (model) {
var self = this;
self.IsVisible = ko.observable(model.IsVisible);
self.IsHidden = ko.computed({
read: function () {
return !self.IsVisible();
},
write: function (newValue) {
self.IsVisible(!newValue);
}
});
}
答案 2 :(得分:0)
这是因为!你正在对observable执行一个函数。使用此:
<input type="checkbox" data-bind="checked: !IsVisible()"/>