【发布时间】:2012-01-06 07:02:52
【问题描述】:
我有一个问题,如果我运行 model.set({field: 'value'}),该模型的验证将运行,就好像明确指定的字段是模型的唯一参数集一样。
我的意思是,如果我有一个需要存在字段 'first_field' 和 'second_field' 的验证,运行 model.set({third_field: 'value'}) 将失败验证,即使 first_field 和 second_field 有已经设置好了。在控制台中,first_field 和 second_field 在运行验证之前和之后都可用...但是 console.log 的 (attrs) 字段仅由 validate 函数中的第三个字段填充。
从我在官方文档中读到的内容来看,我的验证方法模式很好……但显然有些问题。任何想法表示赞赏,代码如下:
class MyModel extends Backbone.Model
# ...
validate: (attrs) ->
errors = []
valid = true
console.log attrs
if (!attrs.first_field)
errors.push('You must add a first field')
if (errors.length > 0)
return errors
# ...
如果我从控制台运行
m = window.router.my_models.test_model # Contains attributes 'first_field' and 'second_field'
m.set({new_field: 'test value'})
它将返回来自验证的“false”。在 validate 方法内的 attrs 上的 console.log 确认唯一存在的 attrs 值是显式设置的“new_field”
【问题讨论】:
-
这是用于非当前版本的 Backbone 吗?根据我的调试,看起来整个模型的属性都被发送到 validate() 因为 Backbone.Model._validate() 中的这一行:“attrs = _.extend({}, this.attributes, attrs);”
-
是的 - 自从写这篇文章以来,主干已经发生了显着变化。
标签: javascript validation backbone.js coffeescript