我们有一个站点,在不同的页面/路由上有几个AutoForms。如果用户在特定表单上触发验证并触发一些验证错误,然后带着该表单离开页面,那么当他们稍后返回该页面时,他们输入的数据将消失,但任何验证错误仍然存在(字段突出显示并显示验证错误消息)。
如何在用户离开表单页面时重置表单验证?
我知道我们可以使用AutoForm.resetForm('our-form-id')
来进行重置,这在控制台中有效,但我找不到合适的钩子来挂它。页面的onStop
IronRouter钩子似乎是正确的地方,但这会触发一个错误Can't call Tracker.flush while flushing.
,如果我把它包装在一个setTimeout
超时0,所以它不运行,直到下一个滴答,它没有效果(大概模板被销毁的那一点)。
我认为当模板被销毁时,错误状态也会被销毁,但事实并非如此。是否有一个未记录的方式来"硬"重置错误,即使一个活跃的模板不再存在?
我们使用的是AutoForm 4.2.2.
您可以使用
重置验证AutoForm.getValidationContext('form-id').resetValidation();
你需要使用你的路由器的exit钩子来重置验证,但是你必须首先获得你的表单的上下文。以下是在FlowRouter中如何完成的:
FlowRouter.route('/edit/:_id', {
name: 'editPage',
action: function() {
BlazeLayout.render('appLayout', {main: 'editPage'});
},
triggersExit: [function() {
AutoForm.getValidationContext('edit-form-id').resetValidation();
}]
});
有关flowRouter触发器的更多信息,请参见https://github.com/kadirahq/flow-router#triggers