【发布时间】:2012-12-14 18:35:14
【问题描述】:
昨天,经过大量研究后,我发现如果我不想在我的主干模型上设置单个属性(并进行验证),那么我需要发送{silent: true}。话虽如此,我们还发现在下一个版本的主干.js 中silent: true 实际上仍会运行验证。
这样做的问题是验证块从实际设置属性中设置。因此,如果我们没有 silent:true ,那么就没有必要使用一个接受单个属性的 set 方法。为了解决这个问题,我们的 validate 方法看起来像这样:
validate : function(attrs) {
var errors = {};
if (typeof attrs.first_name !== 'undefined' && !attrs.first_name) {
errors.first_name = "First name can't be empty";
}
...
if (!_.isEmpty(errors)) {
return errors;
}
}
这会导致无法保存。所以我们决定写这样的东西:
if (_.isEmpty(attrs)) {
attrs = this.attributes;
}
这样做的问题是,如果您在保存时发送了属性,那么您需要将它们合并,我想这没问题,但要让一些简单的验证工作/或不运行,这都是相当大的工作量.此外,除非我覆盖 _validate,否则我需要在每个模型上都这样做。
有没有更好的方法来做到这一点?
【问题讨论】:
-
您可以创建一个行为类似于 mixin 的对象,然后您可以使用它扩展每个模型。
标签: javascript validation backbone.js