Я использую магистральный-на-рельсы камень и получили следующее:стороны клиента проверка на коллекции Backbone.js
Модели
class Crayons.Models.Color extends Backbone.Model
validate: (attrs) ->
if attrs.colorname.length == 0
return "colorname can't be empty"
Коллекции
class Crayons.Collections.Color extends Backbone.Collection
url: '/api/colors'
коллекции создана в маршрутизатор
initialize: ->
@collection = new Crayons.Collections.Color()
@collection.fetch()
методов в ColorIndex
createCrayonId: (event) ->
event.preventDefault()
val = new Crayons.Models.Color()
val.on("error", @errorHandling);
val.set(colorname: $('#new_color_name').val())
@collection.create colorid: val.get("colorname");
$('#new_color')[0].reset()
errorHandling: (model, event) ->
alert(event)
У меня есть простая проверка, которая показывает предупреждение, когда длина равна нуль. Однако после окна предупреждения элементы все еще добавляются в коллекцию из-за @collection.create colorid: val.get("colorname");
Что я могу сделать, чтобы остановить сбор от добавления результатов в нем при обнаружении ошибки?
Update1 Краткосрочное решение ниже, и он работает, но я не уверен, если его правильный способ делать вещи
ok = val.set(colorname: $('#new_video_url').val())
if ok
@collection.create colorname: val.get("colorname");
Update2
class Crayons.Collections.Colors extends Backbone.Collection
url: '/api/videos'
model: new Crayons.Models.Color()
validate: (attrs) ->
if attrs.colorname.length == 0
return "colorname can't be empty"
Правильный путь Функция проверки должна быть в модели и функции, которая предупреждает об ошибках s должен быть инициализирован на модели.
class Crayons.Models.Color extends Backbone.Model
initialize: ->
this.bind("error", @errorHandling)
errorHandling: (model, event) ->
alert(event)
validate: (attrs) ->
#your error validation goes here
Теперь метод индекса довольно прост
createCrayonId: (event) ->
event.preventDefault()
@collection.create colorname: $('#new_color_name').val()
вашей коллекции коллекции цветов или что-то другое? –