在 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 在后端进行调试并查看状态是否正在更改。点击可能会在选中的 属性 更新之前触发,让您认为它不起作用。
我试图让用户点击复选框来切换布尔值 属性,但我似乎无法真正更改底层视图模型。
模型看起来像:
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 在后端进行调试并查看状态是否正在更改。点击可能会在选中的 属性 更新之前触发,让您认为它不起作用。