2016-11-13 17 views
0

入力が有効な場合はサーバが応答し、そうでない場合はエラーオブジェクトが返されます。Emberjs live serverside validation

返されたエラーオブジェクトを使って実際に何かを行う方法がわかりません。エラーオブジェクトをループしてメッセージを表示する方法については、インターネット上に多くの例がありますが、それは私が後にしているものではありません。

私がどのように見えるフィールドの束を持っているフォームのコンポーネントがあります。上記のように構成要素で

{{input type="text" value=account.twitterId class="input" focus-out="validateInput"}} 

とvalidateInputが

validateInput() { 
    let account = get(this, 'account'); 

    account.save().then(() => { 
    console.log('success!'); // add class to the input field 
    }).catch((adapterError) => { 
    console.log(account.get('errors')); // add different class to the input field 
    console.log(adapterError); 
    }); 
}, 

のように見え、これが引き金とどちらかの成功を返しますまたはエラーメッセージ

しかし、結果を受け取り、入力フィールドのクラスキーにクラスを追加するにはどうすればよいですか?

私は、ユーザーが入力を変更した場合、トリガを再なかった種類働いたのが、次の

hasError: false, 

    actions: { 

    validateInput() { 
    let account = get(this, 'account'); 

    account.save().then(() => { 
     set(this, 'hasError', false); 
    }).catch((adapterError) => { 
     set(this, 'hasError', true); 
    }); 
    }, 

}

そして前にif文との試みを、やりました2回目。

これは計算されたプロパティを使用するはずですか?もしそうなら、どのように見えるでしょうか?

答えて

2

あなたの計画はうまくいくはずです。私はあなたが参照として使用できるEmber Twiddleを作成しました。私はsave()メソッドから戻って来るランダムな成功/失敗の約束を可能にするために少しモデルを微調整しましたが、残りは投稿したものとかなり同じです。あなたのコンソールを開いて、つまずきから外に出て、約束の結果が戻ってくるのを見てください。私は、ユーザーにいくつかのフィードバックを隠す/表示することをお勧めするような条件付きテンプレートを使用します。

https://ember-twiddle.com/3398d28381a4c0afb71cb5d59f271e36

あなたの実装と私は責めを持っているとのご質問があるなら、私に教えてください。 ✌

+0

正常に動作することを確認していただきありがとうございます。正常に動作しています。しかし、質問します。私はそれを複数の分野で再利用できるようにするにはどうすればよいですか?明らかに単一の変数を持つことは、どのフィールドが実際に編集されているかにかかわらず、すべてのフィールドが同じように動作することを意味します。 –

+0

twiddleが更新されました。基本的には、「保存可能」(約束を返すsaveメソッドを持つもの、つまりemberデータモデルのいずれか)をとるコンポーネントです。両方に同じアカウントを渡すことができます。両方とも独立した応答に基づいて検証します(コンソールを開いて結果を確認します)。ただし、これらのネットワーク要求をすべて送信するとネットワークのラウンドトリップが過剰になる可能性があります(これらのいずれかが相互に依存している場合は、ヘアリーになります)。 "in-app"バリデーションのために 'ember-cp-validations'のようなものを使ってラウンドトリップを避けることはオプションかもしれません。 –