昨天,经过大量研究后,我发现如果我不想在我的主干模型上设置单个属性(并进行验证),那么我需要发送{silent: true}
. 话虽如此,我们还发现在下一个版本中,backbone.jssilent: true
实际上仍将运行验证。
这样做的问题是,从实际设置属性中设置的验证块。因此,如果我们没有silent:true,那么设置一个接受单个属性的方法就没有意义了。为了解决这个问题,我们的 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,否则我需要在每个模型上都这样做。
有一个更好的方法吗?