gpt4 book ai didi

javascript - 绑定(bind)到由 collection.create() 创建的模型的错误事件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:52 26 4
gpt4 key购买 nike

我有一组评论和一个用于创建新评论的 View 。每个评论都有一些客户端验证正在进行:

class Designer.Models.Comment extends Backbone.Model

validate: (attrs) ->
errors = []

# require presence of the body attribte
if _.isEmpty attrs.body
errors.push {"body":["can't be blank"]}

unless _.isEmpty errors
errors

评论集合非常简单:

class Designer.Collections.Comments extends Backbone.Collection
model: Designer.Models.Comment

我在 NewComment View 中创建评论。此 View 可以访问评论集合并使用它来创建 新评论。但是,Comment 模型中的验证失败似乎不会在整个集合中冒泡。有更好的方法来做到这一点吗?

class Designer.Views.NewComment extends Backbone.View
events:
'submit .new_comment' : 'handleSubmit'

initialize: ->
# this is where the problem is. I'm trying to bind to error events
# in the model created by the collection
@collection.bind 'error', @handleError

handleSubmit: (e) ->
e.preventDefault()
$newComment = this.$('#comment_body')

# this does fail (doesn't hit the server) if I try to create a comment with a blank 'body'
if @collection.create { body: $newComment.val() }
$newComment.val ''
this

# this never gets called
handleError: (model, errors) =>
console.log "Error registered", args

最佳答案

问题在于聚合所有模型事件的集合事件尚未连接。该连接发生在 _add() 中功能。由于在添加模型之前验证失败,因此您不会收到该事件。

失败的唯一迹象发生在 create 返回 false 时,但看起来您已经知道了。

如果您需要验证错误,则需要想出一种方法来获取错误。

一种方法是在验证器中触发 EventAggregator 消息。另一种方法是规避或重新定义 Collection.create 函数以 Hook 模型上的错误事件。

是这样的吗?

model = new Designer.Models.Comment()
model.bind "error", @handleError
if model.set body: $newComment.val()
model.save success: -> @collection.add(model)

关于javascript - 绑定(bind)到由 collection.create() 创建的模型的错误事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com