Это оказалось сложнее, чем я думал. У меня есть ViewModel, который я использую специально для фильтрации в своих сетках. Вот оно:Удалить пустые свойства нокаута viewModel
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 к моему методу действия я получаю ошибку:
The value 'null' is not valid for property
Это происходит потому, что моя сторона сервера Свойства ViewModel не принимают свойства null
и undefined
свойств ViewModel на стороне клиента, даже когда я устанавливаю их как NULL. Единственный способ, чтобы сервер 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
, когда метод заканчивается. Я также попытался преобразовать нокаут ViewModel в объект JavaScript (используя ko.toJS()
) перед запуском метода, но получаю тот же результат.
Что я здесь делаю неправильно и как мне это сделать правильно?
Отметим также, хотя , что вы не разблокировали свои наблюдаемые проверки с помощью круглых скобок ... так что вы возвращаете необработанные функциональные объекты в исходный код при проверке self [property]. Должно быть self [property](). Может быть источником вашей боли. –
Скобки не являются источником моей боли, но это не имеет значения, ваше решение отлично работает! – Alternatex