2017-01-21 3 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値がobj = undefinedが発生します。たとえば、この単純なコンバータを検討してください。私は最後の有効な値を保持したいと思います。

+0

あなたができることの1つは、入力が完了するまで値の適用を遅らせることです。 'value.bind =" obj | json&updateTrigger: 'blur' "'を使用してください。あなたの主な問題についてはまだ考えています。 – LStarky

+1

私は、変換されていない値を返すだけで、それが改善されることを願っています。あなたの 'catch()'では 'return value;'を使います。私は、ValueConverterは状態を持たないので、あなたが達成したいことだけに責任があるとは考えていません。実際に入力値をコミットする前に、フォーム入力で検証を使用したいので、主にValueConverterがユーザー入力を妨げないようにしたいと思うでしょう。 – LStarky

+0

私は@LStarkyに同意します。 ValueConverterは、あなたがしたいことに対して作られていません –

答えて

4

残念なことにValueConverterはステートレスなので、あなたのやりたいことをするように設計されていないため、助けにならないでしょう。

私の提案は、JSONオブジェクトの解析に成功したかどうかをチェックすることです。表示されない場合は、catch()括弧にreturn value;を追加して、未変換の値を返してください。純粋なままにしたい場合は、return null;

また、データをコミットする前に有効な入力を要求するために、フォームに検証を追加する必要があります。私はAurelia検証を使用することをお勧めします - それはあなたのためにここでうまくいくでしょう。

最後に、バインド動作を追加して、Value Converterが入力を妨害しないようにすることを検討する必要があります。 & debounce:1000を追加すると、1秒間のアイドルアイドル入力後にのみチェックするか、または& updateTrigger:'blur'をチェックして、フォーカスが失われるまで検証待ちにすることができます。

関連する問題