1

こんにちは私はKnockoutjsに少し慣れていません。たとえば、メールアドレスを持っているフォームを投稿したいというシナリオにいます。メールアドレスは一意である必要があります。

サーバー上で、電子メールアドレスが一意であるかどうかを確認してから、たとえば、validationjsonクラスを返します。

{isEmailUnique:false、isPasswordStrongEnough:true; }

どうすればknockoutjs検証を使用して、これらのエラーをきちんと表示できますか?

4

2 に答える 2

4

これには、ビュー モデル内のさまざまなオブザーバブルに影響するため、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' 
      } 
   });

パスワード強度の検証にもまったく同じものを使用できます。

このようなバリデーターを使用すると、オブザーバブルが変更されたときに検証が開始されます。これは、検証を行うのに便利な方法です。

于 2012-03-09T09:56:11.123 に答える
2

少し遅れましたが、2 セントの価値があるので、Data (使用される任意のコンテナー) などのプロパティを使用して、サーバー エンドポイント (/Register など) から標準の JSON シリアル化された AjaxResult クラスを返すなど、より一般的なアプローチを取ります。たとえば、マッピング プラグインに再バインドする更新されたモデル)、および検証メッセージ文字列のコレクションなど。その後、ObservableArray にバインドされた HTML 検証の概要を取得し、メッセージをプッシュ/マップすることができます。そこにAjaxの結果が入ります。これは基本的に私が Knockout で行ってきたことであり、うまく機能します。

于 2012-07-03T08:09:02.743 に答える