gpt4 book ai didi

Backbone.js 模型验证仅在 set->save 时(不是在 fetch 时)

转载 作者:行者123 更新时间:2023-12-04 06:46:29 27 4
gpt4 key购买 nike

警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 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 模型,它不会运行验证。 (参见 annotated source 中的 _add_prepareModel 方法)。

集合以这种方式工作有点烦人,但是(至少现在)它就是这样。

关于Backbone.js 模型验证仅在 set->save 时(不是在 fetch 时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044268/

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