【问题标题】:What validation library pairs well with Backbone.js?什么验证库与 Backbone.js 搭配得很好?
【发布时间】:2011-10-22 22:48:46
【问题描述】:

因为我们使用的是 Backbone,所以每次弹出 UI 供用户输入一些数据时,我们并没有真正将表单提交到服务器。但是一些流行的验证框架假设您有一个<form> 来处理您的各种输入(我们没有),并且您将提交该表单(我没有)。

什么验证框架可以很好地与某些东西配对,并允许我在它验证时触发并且不关心我的控件是否在表单中?

【问题讨论】:

  • 你考虑过哪些验证框架?
  • 用于验证的 jQuery 插件 (bassistance.de/jquery-plugins/jquery-plugin-validation) 是主要的插件。在我在上一个项目中使用了相当多的东西之后,我对使用另一个与表单密切相关的东西感到失望。最近我查看了 validate.js (rickharrison.github.com/validate.js) 并意识到它做出了相同的基本假设(表单 + 提交 = 验证)。这就是为什么我认为我应该四处寻找更好的解决方案。

标签: javascript validation backbone.js


【解决方案1】:

有趣的问题。我自己没有找到 100% 的解决方案,所以不要将其视为对您问题的直接答案,但这可能有助于如何以最佳方式解决 IMO。

对我来说,最合适的是完全在 Json 中定义的验证规则,同时具有客户端和服务器端的声明式验证——“构建器”,它将根据定义构建规则。这将启用 DRY(服务器/客户端)验证。

JSON 模式对此非常有限。

我相信 Kansojs.org 有一个非常好的 JSON 验证定义,但我还没有遇到实现它的构建器。

我前段时间提出了一个关于这个的问题,但我担心我的类似论文的问题没有引起任何回应 :) DRY user-input validation (clientside, serverside) using JSON-schema

希望对一些人有所帮助, 吉尔特-扬

【讨论】:

    【解决方案2】:

    我们最近遇到了这个库:https://github.com/thedersen/backbone.validation

    至少在纸面上,它看起来很棒。它不需要表单,而是似乎很乐意在模型级别进行验证。如果模型上的元素和属性之间存在简单映射,它还具有一些更新视图中元素以反映验证错误的简单功能。

    一旦我们有机会彻底练习它,我会回来更新更多信息。

    【讨论】:

    • 你觉得这个怎么样?如果您尝试将属性设置为无效值,我正在尝试将其扩展为默认值。
    • 我最终在我处理的代码中没有做太多的验证(这是一堆复杂的数据显示和用户交互,但没有真正的数据输入)。一位同事告诉我,我们正在使用我们一开始的验证的重写版本,因为我们并不热衷于它在实践中的工作方式。所以我认为我们目前拥有的东西是相当本土的。
    • 这正是我们开始的路线。如果新值未通过验证,我们希望验证框架使用默认值(如果有)。外面的两个大公司没有这个选项,所以我们开始破解。希望我们能说服我们的所有者将其全部开源!
    【解决方案3】:

    我正在寻找一个跨平台(nodejs、浏览器)的主干验证库,它支持异步测试、自定义测试、自定义语言错误消息、测试关系等......

    我还没有找到一个独立的库,但我在这里找到了一个解决方案:https://github.com/powmedia/backbone-forms,它会生成整个表单而不是仅仅验证它,并且还有自定义错误消息......

    顺便说一句,使用验证器生成表单是一个绝妙的主意。我认为 Backbone-forms 不够灵活,对我来说太大了。我想使用 Backbone.UI,它有一个自定义数据绑定器。我不知道如何自定义 Backbone-forms 以使用 Backbone.UI 数据绑定器。

    我创建了自己的库:https://github.com/inf3rno/bb-validation,它只包含 1.0 版中的验证,现在我重构并重写了部分代码,并在 2.0 版中添加了一个表单生成器。该表单生成器使用http://perka.github.io/backbone-ui 字段,我的目标是开发类似于骨干表单但由较小的库组成的东西。我认为这是编写可重用 javascript 代码的方式...

    【讨论】:

    • 感谢您添加新答案,这是关于错误消息限制的一个很好的说明。这不是我必须考虑的事情(奇怪的是,我现在的雇主并不关心)但许多网站必须牢记。
    • 是的,我将编写一个匈牙利应用程序,因此错误消息中的英文属性名称不是一个选项。 :S 我想我必须编写自己的验证器......
    【解决方案4】:

    为什么要注意使用和覆盖Backbone的原始验证入口点?这是文档的链接:

    http://backbonejs.org/#Model-validate

    从文档中:

    validatemodel.validate(attributes, options) 
    

    此方法未定义,我们鼓励您使用可以在 JavaScript 中执行的任何自定义验证逻辑来​​覆盖它。

    默认情况下,保存检查会在设置任何属性之前验证,但您也可以通过传递 {validate: true} 作为选项告诉 set 验证新属性。

    验证方法接收模型属性以及传递给设置或保存的任何选项。如果属性有效,则不要从 validate 中返回任何内容;如果它们无效,则返回您选择的错误。

    它可以像要显示的字符串错误消息一样简单,也可以是一个以编程方式描述错误的完整错误对象。如果 validate 返回错误,save 将不会继续,并且模型属性不会在服务器上被修改。验证失败会触发“无效”事件,并使用此方法返回的值设置模型上的 validationError 属性。

    -- 同时使用和覆盖这两个函数:

    validationErrormodel.validationError 
    

    上次验证失败时 validate 返回的值。

    isValidmodel.isValid() 
    

    运行 validate 以检查模型状态。

    【讨论】:

    • 这在今天可能是一个有效的答案,但我相当肯定,当我四年前问这个问题时,Backbone.js 中没有这样的验证钩子。
    • 嗨@JohnMunsch,我刚刚留下了答案,所以今天/将来搜索它的任何人都可以阅读您的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多