Проверка Knockoutjs и проверка сервера - PullRequest
1 голос
/ 09 марта 2012

Привет, я новичок в Knockoutjs, я нахожусь в ситуации, когда я хочу опубликовать форму, где у меня есть, например, адрес электронной почты, есть требование, чтобы адрес электронной почты был уникальным.

На сервере я проверяю, является ли адрес электронной почты уникальным или нет, а затем возвращает класс validationjson, например

{isEmailUnique: false, isPasswordStrongEnough: true;}

Как с помощью проверки knockoutjs аккуратно показать эти ошибки?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Я бы использовал для этого два разных валидатора на стороне сервера, так как они влияют на разные наблюдаемые в модели представления.

Изначально взято из 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'
};              

Затем на сервере вам нужно создать конечную точку, которая будет принимать запросы POST, когда вы выполняете поиск, а затем возвращать true или false в зависимости от результата запроса.

Для использования вышеуказанного валидатора

this.email = ko.observable()
   .extend({ 
      isEmailUnique: { 
         message: 'Something else perhaps? It will override the message in the validator' 
      } 
   });

Вы можете использовать то же самое для проверки надежности пароля.

Использование таких валидаторов запускает валидацию, когда наблюдаемые изменения изменяются, что может быть полезным способом валидации.

2 голосов
/ 03 июля 2012

Я немного опоздал, но из-за своих 2 центов я бы выбрал более общий подход, такой как возврат стандартного сериализованного JSON-класса AjaxResult из конечных точек вашего сервера (например, / Register) со свойствами, такими как Data ( произвольный контейнер, используемый, например, для обновленной модели для повторного связывания с плагином сопоставления), а также набор строк сообщения проверки и т. д. Затем можно получить сводную информацию о проверке HTML, которая привязана к ObservableArray, и отправить / отобразить сообщения от вашего Ajax приводят туда. По сути, это то, что я делал с Knockout, и это прекрасно работает.

...