Должен быть сбой в моем синтаксисе или что-то, чего я не понял, но когда я делаю метод сохранения в моей модели. Обратный вызов ошибки вызывается независимо от результата метода.
@new_activity = new Activity()
@new_activity.save
know: $('input#know').val()
learn: $('input#learn').val()
success: -> console.log 'success'
error: -> console.log 'error'
В моем случае, поскольку я не знаю, действительно ли new_activity успешно прошел валидацию, я должен сделать некрасивый трюк, чтобы добавить действие в коллекцию. (Между прочим, я не использую метод create, так как я хочу иметь разные ошибки, а не просто «false».
if @new_activity.has('know') and @new_activity.has('learn')
app.collections.activities.add @new_activity
Когда это успешно, хотя; оповещение о созданной модели.
Редактировать: Более подробная информация.
Вот моя модель:
инициализировать: ->
_.bindAll @, 'validate', 'errorHandler'
@ .bind 'error', @ errorHandler
validate: (attrs) ->
errors = []
# We only support a certain number of languages, we enforce that the user does not select a wrong set.
if _.isEmpty(_.intersection([attrs.know], ['en', 'fr'])) is true
errors.push 'This language is not currently supported.'
if _.isEmpty(_.intersection([attrs.learn], ['en', 'fr', 'de', 'es', 'zh', 'pt', 'ar', 'ja', 'ru'])) is true
errors.push 'You cannot learn this language yet.'
if _.isEmpty(errors) is false
errors
errorHandler: (model, error) ->
console.log error
Когда происходит проверка и если метод validate ничего не возвращает, он все равно вызывает событие ошибки, а переменная ошибки содержит модель (но без сообщения об ошибке).