删除挖空视图模型的空属性
本文关键字:属性 模型 视图 删除 | 更新日期: 2023-09-27 18:30:36
事实证明,这比我想象的要难。我有一个视图模型,专门用于在我的网格中进行过滤。在这里:
var GridFiltersViewModel = function () {
var self = this;
self.search = ko.observable();
self.sortColumn = ko.observable();
self.sortDirectionIsAscending = ko.observable(true);
self.page = ko.observable(1);
self.pageSize = ko.observable(10);
self.pageCount = ko.observable();
self.itemCount = ko.observable();
};
我面临的问题是,当我将此 ViewModel 的实例发送到我的操作方法时,出现错误:
值"null"对属性无效
发生这种情况是因为我的服务器端 ViewModel 属性不接受客户端 ViewModel 的null
和undefined
属性,即使我将它们设置为可为空也是如此。让服务器端 ViewModel 接受空属性的唯一方法是根本不发送它们。这是我的尝试:
var GridFiltersViewModel = function () {
// the properties from before
self.removeEmptyProperties = function () {
for (var property in self) {
if (self[property] === null || self[property] === undefined) {
delete self[property];
}
}
};
};
可以说,它不起作用。目前,当该方法完成时,我只是得到一个undefined
对象。在运行该方法之前,我还尝试将挖空视图模型转换为JavaScript对象(使用ko.toJS()
),但我得到了相同的结果。
在这里做错了什么,我怎么做对?
我只会构造一个新的 JSON 对象并返回它,而不是尝试一些奇特的东西,比如删除属性......像这样:
var GridFiltersViewModel = function () {
var self = this;
self.prop1 = ko.observable(null);
self.prop2 = ko.observable('Test');
self.prop3 = ko.observable(undefined);
self.definedProperties = ko.computed(function () {
var json = {};
json.props = "";
for (var property in self) {
if (self[property]() !== null && self[property]() !== undefined) {
json[property] = self[property]();
if (json.props !== "") {
json.props += ", ";
}
json.props += property;
}
}
return json;
});
};
完整示例如下:https://jsfiddle.net/brettwgreen/ehy7cmud/2/