Я создаю пользовательский интерфейс расширенного поиска, аналогичный веб-интерфейсу построителя запросов TFS. Использование нокаута для реализации на стороне клиента и все более или менее работает, кроме окончательной проверки, чтобы убедиться, что определенные необходимые элементы в основном выбраны. Это как бы работает, поскольку дает мне ошибку проверки, если я выбираю элемент, а затем отменяю выбор элемента. Это нормально, но я хотел бы, чтобы форма проверялась при нажатии кнопки поиска.
Я почти уверен, что мне нужно использовать метод ko.validatedobservable, я просто не уверен, как именно. В любом случае, у меня есть скрипка, на которую можно посмотреть: http://jsfiddle.net/sstolp/uXBSA/ если у кого-то есть время или желание помочь мне. Я был бы глубоко признателен.
Спасибо за уделенное время.
scvm.SearchLine = function () {
var self = this;
self.selectedField = ko.observable().extend({ required: true });
self.selectedOperator = ko.observable().extend({ required: true });
self.firstdate = ko.observable(new Date());
self.lastdate = ko.observable(new Date());
self.thedate = ko.observable(new Date());
return self;};
scvm.Criteria = function () {
var self = this,
lines = ko.observableArray([]),
// Put one line in by default
loadInitialData = function () {
lines.push(new scvm.SearchLine());
},
rowcount = ko.computed(function () {
return lines().length;
}),
// Operations
addLine = function () {
lines.push(new scvm.SearchLine());
},
removeLine = function (line) {
lines.remove(line);
},
search = function () {
var data = $.map(lines(), function (line) {
return line.selectedField() ? {
selectedField: line.selectedField().searchfield,
selectedOperator: line.selectedOperator().name,
} : undefined
});
alert("Send to server: " + JSON.stringify(data));
},
clear = function () {
lines.removeAll();
};
return {
lines: lines,
loadInitialData: loadInitialData,
rowcount: rowcount,
addLine: addLine,
removeLine: removeLine,
search: search,
clear: clear
};
}();