2017-01-21 29 views
1

有没有办法在验证错误的情况下停止值转换器的更新?例如,考虑这个简单的转换器:在验证错误的情况下停止Aurelia值转换器更新

export class JsonValueConverter { 
    toView(value) { 
     return JSON.stringify(value); 
    } 

    fromView(value) { 
     try { 
      return JSON.parse(value); 
     } catch (e) {} 
    } 
} 

<textarea value.bind="obj | json"></textarea> 

任何无效的JSON值输入到textarea的原因obj = undefined。我想保留最后一个有效值。

+0

你可以做的一件事是延迟应用该值,直到输入完成。使用'value.bind =“obj | json&updateTrigger:'blur'”'。仍在考虑你的主要问题。 – LStarky

+1

我想你可以只返回未转换的值,并希望它提高。在你的catch()中,使用'return value;'。我在想,因为ValueConverter没有状态,所以它不能单独为你想完成的任务负责。在实际提交输入值之前,您会希望在表单输入中使用验证,因此主要是希望避免ValueConverter干扰用户输入。 – LStarky

+0

我同意@LStarky。 ValueConverter不是为你想要做的 –

回答

4

不幸的是,一个ValueConverter不会帮助你,因为它是无状态的,并没有被设计为做你正在做的事情。

我的建议是检查它是否成功解析到JSON对象。如果不是,只需将return value;添加到您的catch()括号中即可返回未转换的值。或者,如果您希望保持纯正,请拨打return null;

您还应该在表单上添加验证,以在提交数据之前要求有效输入。我建议使用Aurelia验证 - 它会在这里适合你。

最后,您应该考虑添加绑定行为以避免您的Value Converter干扰您的输入。您可以添加& debounce:1000以使其仅在输入后的1秒空闲后才检查,或者& updateTrigger:'blur'等待验证直到焦点丢失。

相关问题