在Breeze中验证多个属性

时间:2013-04-17 02:46:31

标签: breeze

使用Breeze处理以下方案验证的推荐方法是什么?

  

场景:我有一个包含startDateendDateuseDate字段的实体。如果useDate为真,那么我想验证   startDateendDate是有效日期,endDate>   startDate

Breeze文档中建议的方法是创建自定义Validator并在实体上注册它。我在这种方法中看到的问题是,每当这三个属性中的一个发生更改时,我就需要手动调用validateEntity(),以便将验证错误添加到实体的错误集合中。在单个属性上添加自定义验证器的另一种推荐方法不提供对实体的访问(只是当前属性值),因此这也不是一个很好的选择。

我可以在实体上订阅每个Knockout属性更改事件,然后调用validateEntity()但这看起来很笨拙。

是否有任何方法可以向实体添加自定义实体级验证器,但是将其与一个或多个属性相关联,以便在其中一个关联属性发生更改时调用实体级验证器?看起来Breeze在这里缺少一个常见的验证用例场景,但我可能错过了一些东西。

谢谢,理查德

1 个答案:

答案 0 :(得分:2)

我认为您可以对每个startDate,endDate和useDate字段应用自定义验证器函数,以便对任何这些属性的更改将触发相同的逻辑。

查看Breeze代码,看起来传递给验证函数的 context 对象将具有实体属性,因此您可以访问实体上的其他属性(不是测试)。

之后,您可以,如果需要,也可以使用this post中的代码将这些验证功能复制为您的UI中绑定的knockout.validation规则。