Backbone.js: запускать проверки и запускать события ошибок на множестве, но не прерывать установку, если проверки не пройдены - PullRequest
3 голосов
/ 29 марта 2012

У меня есть модель Backbone с пользовательским методом проверки, который проверяет формат одного из атрибутов модели. Моя модель подключена к представлению, которое предоставляет указанный атрибут через текстовое поле. В представлении есть кнопка «Сохранить», которую пользователь должен явно нажать, чтобы сохранить изменения модели на сервере.

Когда пользователь вводит недопустимое значение атрибута, я хочу визуально пометить поле как недопустимое. Пока все просто - я могу связать событие изменения поля ввода с функцией, которая вызывает myModel.set({ attribute: value }), и прослушать событие "error" в модели, чтобы сообщить, когда проверка завершилась неудачно, и я должен отметить вход как недействительный. .

Проблема возникает, когда я хочу обработать нажатие кнопки сохранения. Поскольку Backbone.Model.set прерывает фактическую настройку атрибутов в модели, если проверка не удалась, моя модель не будет точно отражать введенное пользователем значение, пока оно не будет действительным. Когда пользователь нажимает сохранить после ввода недопустимого значения, я проверяю, является ли модель действительной, обнаруживаю, что это так (потому что недействительный атрибут никогда не устанавливался), и сохраняю старое (действительное) значение атрибута на сервере.

Мне кажется, что мне нужна версия set, которая всегда вносит запрошенные изменения, но также запускает проверки и события. set(..., { silent: true }) позволит выполнить изменение, но не будет запускать проверки или запускать события.

Короче говоря, я хочу, чтобы моя модель иногда существовала в недопустимом состоянии (если пользователь ввел недопустимые значения атрибута), и я хочу иметь возможность получать события при переходе между действительным и недействительным. Есть ли изящный способ сделать это с позвоночником, или я думаю об этом совершенно неправильно?

Ответы [ 2 ]

5 голосов
/ 18 сентября 2012

Я предлагаю вам использовать этот плагин проверки магистрали https://github.com/thedersen/backbone.validation Чрезвычайно полезно.Для вашего сценария использования (чтобы значения могли быть установлены, даже если они недействительны), вам просто нужно переопределить функцию набора вашей модели.метод validate для возврата true, при этом все еще вызывая проверки.После нажатия кнопки сохранения вы можете позвонить

      var errors = model.validate(model.validate.attributes);

. Это вернет все ошибки, которые есть в вашей модели, и вы сможете соответствующим образом их отобразить.У вас также есть обратные вызовы для действительных и недействительных, которые вы можете свободно использовать

2 голосов
/ 19 апреля 2012

То, что я сделал с помощью такого рода проверки, - это сброс атрибутов моделей из входных данных перед сохранением по щелчку сохранения (выполняется только при сохранении, если набор не дает сбоя)

Таким образом, нажатие кнопки сохранения повторно запускает проверку - вызывает ошибку.

Это означает, что модель всегда действительна, и вы не можете перейти на следующую страницу, пока все введенные данные не будут действительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...