我正在尝试使用aurelia-validation
进行客户端验证。尽管客户端验证工作得很好,但它会强制重新评估视图中的自定义元素。例如,典型的流程如下(自定义元素的顺序为detached
/" unbind
ed"可能会不时发生变化):
validation starting
custom-element#1 detached
custom-element#2 detached
custom-element#3 detached
custom-element#2 unbind
custom-element#3 unbind
custom-element#1 unbind
validation ended
custom-element#1 bind
custom-element#2 bind
custom-element#1 attached
....
当然,重新激活自定义元素意味着还需要从服务器获取数据,以便以有意义的方式呈现元素(例如,下拉列表中的选项或列表中的项目等等)上)。
有关应用程序的更多详细信息:验证规则在服务器端(WebAPI)定义,端点可以为"实体"提供规则。类型。然后,这些规则在客户端转换为aurelia-validation
规则。然后将这些规则用于我的目标实体对象(可以是任何"实体"类型,具体取决于场景;然后相应地获取规则)是一件简单的事情。示例代码如下所示:
this.clientRules = this.ruleAdapter.toAureliaRules(validationRules);
this.validationController.addObject(this.targetEntity, this.clientRules);
// and finally invoke validate when required
this.validationController.validate()
请注意,自定义元素也会使用targetEntity
。
我不确定如何隔离问题并寻找根本原因。任何建议都会很好。
更新:在targetEntity
期间考虑validate
正在修改,我也尝试使用以下代码:
const dummyEntity = JSON.parse(JSON.stringify(this.entity));
this.validationController.validate({ object: dummyEntity, rules: this.clientRules });
// naturally, while trying this code I removed the addObject call
但是,这也没有用:(
于2014年1月12日更新:感兴趣的用户也可以通过here进行讨论。
其他调查结果:如果有帮助,请分享另一项调查结果。在调试期间,即使在开始验证之前,即在控件到达this line之前,自定义元素似乎已分离。那根本原因可能在其他地方吗?
解决方案:抱歉。我的坏:P确实与aurelia验证无关。解决方案是将if.bind
更改为show.bind
:D