我正在尝试允许用户单击复选框以切换布尔属性,但我似乎无法真正更改基础视图模型。
模型看起来像:
var fund = function () {
var self = this;
self.Id = ko.observable();
self.name = ko.observable();
self.ticker = ko.observable();
self.companyId = ko.observable();
self.status = ko.observable();
self.number = ko.observable();
self.addedDate = ko.observable();
self.comment = ko.observable();
self.companyName = ko.observable();
self.isSalary = ko.observable(); <--
底部的属性是有问题的属性..这是我的HTML。
<input type="checkbox" data-bind="checked: isSalary, click: function(data) { $root.toggleReference(data, 'SAL', 'isSalary') }" />
我的View Model上的函数..
toggleReference = function (currentFund, referenceAbbrev, updateProperty) {
alert(currentFund.Id() + " " + referenceAbbrev + " " + updateProperty);
}
我已尝试在此函数完成后应用绑定,并且还:
var currentValue = currentFund[updateProperty];
fund.updateProperty = updateProperty;
当我的警报通过时,他们切换复选框(因为我点击它),但切换回当我最初在函数完成时应用绑定时所处的状态。这就像我试图更新它一样,我永远不会将切换后的值重新应用到视图模型。
如何专门更新此属性?
注意:在HTML上,我使用的是observableArray()
,因为我们正在处理表格格式的内容。
答案 0 :(得分:3)
您的click
绑定需要返回true
,否则就会将其视为an attempt to prevent the default behaviour。这应该解决它:
<input type="checkbox" data-bind="checked: isSalary, click: function(data) { $root.toggleReference(data, 'SAL', 'isSalary'); return true; }" />
Here's a simple fiddle证明了这个问题。
答案 1 :(得分:0)
选中的绑定应该处理viewModel更新,而无需任何其他编码。
点击装订是什么?如果您只想检查状态,请使用Chrome在后端进行调试,并查看状态是否正在发生变化。在更新已检查的属性之前,可能会触发单击,这使您认为它无法正常工作。