У меня есть модель Backbone с пользовательским методом проверки, который проверяет формат одного из атрибутов модели. Моя модель подключена к представлению, которое предоставляет указанный атрибут через текстовое поле. В представлении есть кнопка «Сохранить», которую пользователь должен явно нажать, чтобы сохранить изменения модели на сервере.
Когда пользователь вводит недопустимое значение атрибута, я хочу визуально пометить поле как недопустимое. Пока все просто - я могу связать событие изменения поля ввода с функцией, которая вызывает myModel.set({ attribute: value })
, и прослушать событие "error"
в модели, чтобы сообщить, когда проверка завершилась неудачно, и я должен отметить вход как недействительный. .
Проблема возникает, когда я хочу обработать нажатие кнопки сохранения. Поскольку Backbone.Model.set
прерывает фактическую настройку атрибутов в модели, если проверка не удалась, моя модель не будет точно отражать введенное пользователем значение, пока оно не будет действительным. Когда пользователь нажимает сохранить после ввода недопустимого значения, я проверяю, является ли модель действительной, обнаруживаю, что это так (потому что недействительный атрибут никогда не устанавливался), и сохраняю старое (действительное) значение атрибута на сервере.
Мне кажется, что мне нужна версия set
, которая всегда вносит запрошенные изменения, но также запускает проверки и события. set(..., { silent: true })
позволит выполнить изменение, но не будет запускать проверки или запускать события.
Короче говоря, я хочу, чтобы моя модель иногда существовала в недопустимом состоянии (если пользователь ввел недопустимые значения атрибута), и я хочу иметь возможность получать события при переходе между действительным и недействительным. Есть ли изящный способ сделать это с позвоночником, или я думаю об этом совершенно неправильно?