【问题标题】:Client Side validation on Backbone.js collectionBackbone.js 集合上的客户端验证
【发布时间】:2012-02-23 22:53:02
【问题描述】:

我正在使用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");,项目仍在添加到集合中

当发现错误时,我可以做些什么来阻止集合添加结果?

更新1 短期解决方案如下,它有效,但我不确定它是否是正确的做事方式

ok = val.set(colorname: $('#new_video_url').val())
if ok
  @collection.create colorname: val.get("colorname");

更新2

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

现在index中的方法很简单

  createCrayonId: (event) ->
    event.preventDefault()
    @collection.create colorname: $('#new_color_name').val()

【问题讨论】:

  • 你的收藏是颜色的集合还是别的什么?

标签: ruby-on-rails backbone.js coffeescript


【解决方案1】:

您的验证触发了颜色模型,而不是集合模型。因此,如果您想以干净的方式执行此操作,则应为集合模型添加验证以检查 colorId 是否有效,与 videoid 的更新相同。

您可以设置集合的模型属性,并且在创建/保存集合模型时,它将使用此模型的验证来确定是否应该创建/保存模型

【讨论】:

  • 我已经尝试在 update2 中这样做,但我认为我没有在集合上正确设置模型,因此应用程序无法加载。你能建议如何在集合中设置模型吗?
  • 在设置模型属性时不要使用new - 你应该只传递对构造函数的引用,所以Crayons.Models.Color 就足够了
  • ah and Collections 没有验证方法 - 保存/创建集合模型时使用模型验证
  • 施威特。知道了。用更多信息更新了答案。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多