Я хотел бы использовать Knockout.js, чтобы выделить ошибки в форме. Некоторые из этих ошибок могут быть сгенерированы с помощью проверки на стороне клиента, а некоторые из них могут появляться на сервере при сохранении формы. В идеале я хотел бы шаблон, чтобы выглядеть следующим образом:Использование привязок Knockout.js для отображения ошибок в форме
<label data-bind="css: { error: Errors.ProjectName }">Project Name<input data-bind="value: ProjectName" /></label>
Errors.ProjectName
Если верно иш, то выше <label>
будет иметь CSS класс error
.
Однако, чтобы сделать это, я думаю, что я должен сделать что-то вроде Errors
:
this.Errors = {
ProjectName: ko.observable(false),
FieldA: ko.observable(false),
FieldB: ko.observable(false),
// ... Every single field
};
Который является обслуживание кошмар, так как эта форма имеет много, много полей. Поэтому, вместо этого, я хотел бы, чтобы модель каким-то образом содержала список полей ошибок. Больше как:
this.Errors = ko.observableArray([]);
Когда мой код становится известно об ошибке, я могу просто установить этот массив в список полей, содержащих ошибки:
model.Errors(['ProjectName']); // ProjectName is invalid
Шаблон затем стал:
<label data-bind="css: { error: Errors.indexOf('ProjectName') >= 0 }">Project Name<input data-bind="value: ProjectName" /></label>
Это работает, однако мне кажется, что мне неловко проверять наблюдаемые индексы массива в шаблоне. Часть меня, которая пытается овладеть Нокаутом, требует более чистого и удобного для чтения метода.
Некоторые могут утверждать, что Knockout.js не является подходящим инструментом для отображения сообщений об ошибках и проверки пользовательского интерфейса. Вероятно, это справедливое мнение. Однако мне нравится идея иметь одну модель для хранения ошибок, а так как ошибки добавляются или удаляются из этой модели, сообщения об ошибках и выделенные поля в пользовательском интерфейсе автоматически отражают эти изменения, и состояние данных может быть легко запрошено на в любой момент.
Вопрос: Каков самый чистый способ реализации выделения ошибки, когда модель содержит список полей по ошибке?
Удивительно, если есть способ получить плагин [mapping plugin] (http://knockoutjs.com/documentation/plugins-mapping.html), чтобы автоматически добавлять наблюдаемые данные 'hasError' в каждое отображаемое поле. –
Вы можете посмотреть обратный вызов 'create' плагина сопоставления: http: // knockoutjs.com/documentation/plugins-mapping.html # customizing_object_construction_using_create –
Я пытаюсь избежать решений, когда мне приходится вручную вызывать каждое отдельное поле. Их много, и я не хочу перечислять их в коде. Однако, возможно, нет никакого способа обойти это. –