更新View Model上的Observable

时间:2015-04-10 14:38:37

标签: knockout.js

我正在尝试允许用户单击复选框以切换布尔属性,但我似乎无法真正更改基础视图模型。

模型看起来像:

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(),因为我们正在处理表格格式的内容。

2 个答案:

答案 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在后端进行调试,并查看状态是否正在发生变化。在更新已检查的属性之前,可能会触发单击,这使您认为它无法正常工作。