我正在使用backbone-on-rails gem并获得以下内容:
模型
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"
正确的方式 验证函数应该在模型中,并且应该在模型上初始化警告错误的函数。
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()
答案 0 :(得分:2)
您的验证会触发颜色模型,但不会触发收集模型。因此,如果您想以干净的方式执行此操作,则应该为集合模型添加验证以检查colorId是否有效,与使用videoid的更新相同。
您可以设置集合的模型属性以及创建/保存集合模型的时间,它将使用此模型的验证来确定是否应该创建/保存模型