如何在离开表单页面时重置Meteor AutoForm验证



我们有一个站点,在不同的页面/路由上有几个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

最新更新