こんにちは私はKnockoutjsに少し慣れていません。たとえば、メールアドレスを持っているフォームを投稿したいというシナリオにいます。メールアドレスは一意である必要があります。
サーバー上で、電子メールアドレスが一意であるかどうかを確認してから、たとえば、validationjsonクラスを返します。
{isEmailUnique:false、isPasswordStrongEnough:true; }
どうすればknockoutjs検証を使用して、これらのエラーをきちんと表示できますか?
こんにちは私はKnockoutjsに少し慣れていません。たとえば、メールアドレスを持っているフォームを投稿したいというシナリオにいます。メールアドレスは一意である必要があります。
サーバー上で、電子メールアドレスが一意であるかどうかを確認してから、たとえば、validationjsonクラスを返します。
{isEmailUnique:false、isPasswordStrongEnough:true; }
どうすればknockoutjs検証を使用して、これらのエラーをきちんと表示できますか?
これには、ビュー モデル内のさまざまなオブザーバブルに影響するため、2 つの異なるサーバー側バリデーターを使用します。
ノックアウト検証の readmeから引用
ko.validation.rules['isEmailUnique'] = {
validator: function(val, param){
var isValid = true;
$.ajax({
async: false,
url: '/validation/isEmailUnique',
type: 'POST',
data: { value: val, param: param },
success: function(response){
isValid = response === true;
},
error: function(){
isValid = false; //however you would like to handle this
}
});
return isValid;
},
message: 'The Email is not unique'
};
次に、サーバーで、ルックアップを実行し、クエリの結果に応じて true または false を返す POST 要求を受け入れるエンドポイントを作成する必要があります。
上記のバリデータを使用するには
this.email = ko.observable()
.extend({
isEmailUnique: {
message: 'Something else perhaps? It will override the message in the validator'
}
});
パスワード強度の検証にもまったく同じものを使用できます。
このようなバリデーターを使用すると、オブザーバブルが変更されたときに検証が開始されます。これは、検証を行うのに便利な方法です。
少し遅れましたが、2 セントの価値があるので、Data (使用される任意のコンテナー) などのプロパティを使用して、サーバー エンドポイント (/Register など) から標準の JSON シリアル化された AjaxResult クラスを返すなど、より一般的なアプローチを取ります。たとえば、マッピング プラグインに再バインドする更新されたモデル)、および検証メッセージ文字列のコレクションなど。その後、ObservableArray にバインドされた HTML 検証の概要を取得し、メッセージをプッシュ/マップすることができます。そこにAjaxの結果が入ります。これは基本的に私が Knockout で行ってきたことであり、うまく機能します。