警告:我正在使用一个我无法完全控制的后端,因此我正在努力解决Backbone中的一些问题,这些问题可能会在其他地方更好地解决...不幸的是,我别无选择,只能在这里处理它们!
所以,我的问题是我真的想从表单中验证用户输入(当我在Backbone模型上设置值时),但是我从API上获得的模型在新创建的对象上(通过只接受名称的帖子) ,并且仅返回名称和对象ID)将无法通过验证检查.
例如,当在数据库中创建新对象时,会将两个关键字段填充为空字符串(因此当Backbone访问API并填充模型时,它会使用空字符串填充这些键).当用户将这些对象保存回来后编辑时,我想强制他们输入这两个键的值 - 这非常容易,因为Backbone的内置验证方法.
当然,问题是验证是在fetch-> set(不需要的行为)和set-> save(所需的行为)上触发 - 所以新创建的模型根本不会加载... Backbone收集它们,验证失败,错误触发.
所以,我的问题是:是否有一种"Backbone-y"方式只能验证set-> save上的模型,而不是fetch-> set?我可以使用特定的触发器来解决这个问题吗?
任何想法将不胜感激.
Backbone.Model.set如果您传入,则不会执行验证{ silent: true },并且fetch会将任何选项传递给设置,因此您可以覆盖fetch或编写自己的fetchSilent方法,在方法对象中传递该方法.
但是,您可能会遇到一些问题Backbone.Collection.fetch,因为当它从服务器接收属性时,它不会创建新模型set.相反,它创建一个新模型,model = new this.model(attrs, {collection: this});然后validate在对象上有方法时执行验证.
这有点烦人.您可以通过parse在集合上定义一个方法(如果您正在使用一个)来静默创建模型(使用{silent: true}),因为当Backbone.Collection.add接收到完全形成的Backbone模型时,它将不会运行验证.(请参阅带注释的源中的_add和_prepareModel方法).
这个系列以这种方式工作有点烦人,但(至少现在)就是它的本质.
| 归档时间: |
|
| 查看次数: |
6340 次 |
| 最近记录: |