在 View Model 上更新 Observable

Update Observable on View Model

我试图让用户点击复选框来切换布尔值 属性,但我似乎无法真正更改底层视图模型。

模型看起来像:

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') }" />

还有我的视图模型上的函数..

toggleReference = function (currentFund, referenceAbbrev, updateProperty) {
        alert(currentFund.Id() + " "  + referenceAbbrev + " " + updateProperty);
}

我试过在这个函数完成后应用绑定,还有:

var currentValue = currentFund[updateProperty];
fund.updateProperty = updateProperty;

当我的警报通过时,他们会切换复选框(因为我正在单击它),但会在函数完成时切换回我最初应用绑定时所处的任何状态。这就像虽然我正在尝试更新它,但我永远不会将切换的值重新应用回视图模型。

我该如何具体更新此 属性?

注意:在 HTML 上,我使用 observableArray() 因为我们处理的是 table 格式。

您的 click 绑定需要 return true,否则 knockout 会将其视为 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 演示问题。

已检查的绑定应在无需任何额外编码的情况下处理 viewModel 更新。

点击绑定有什么用?如果您只想检查状态,请使用 Chrome 在后端进行调试并查看状态是否正在更改。点击可能会在选中的 属性 更新之前触发,让您认为它不起作用。