我在检查复选框后尝试启用按钮,元素处于模态中。我正在使用MVC,并且我在主绑定之后添加了observable,以便将它们与这样的模态一起使用
<script type="text/javascript">
var Model = function () {
self.check = ko.observable(false);
};
$(document).ready(function () {
ko.cleanNode($('#Modal')[0]);
ko.applyBindings(Model, $('#Modal')[0]);
});
</script>
模态中的html元素如下所示:
<input type="checkbox" data-bind="checked:viewModel.check">bla bla..
<button type="button" data-bind="enable:viewModel.check==true" class="btn btn-primary">Delete</button>
当我选中复选框时,viewModel.check为true,未检查的时间为false,这是正常工作但按钮始终处于禁用状态。有任何建议请
答案 0 :(得分:1)
有几个问题......
调用ko.applyBindings
时,第一个参数需要是viewModel 实例。这意味着您需要在viewModel“类”上调用new
。
ko.applyBindings(new Model())
您正在引用一个不存在的viewModel
变量。应用绑定时,它使用传入的viewModel的范围来创建绑定上下文。这意味着HTML中可用的值与viewModel中this
上的值相同。所以,只需使用check
。
enable
绑定绑定到表达式,而不是可观察的启用绑定必须绑定到observable,但您已将其绑定到表达式check==true
。在这种情况下,check
实际上是一个可观察的 - this.check = ko.observable()
,因此您最终要比较的是function() { return true } == true
的效果,预计false
。要对可观察对象进行比较,必须先将它们作为函数调用来打开它们:check() == true
。但请注意,无论何时编写== true
,您可能都不需要:enable: check
是您最终想要的。