2012-03-09 2 views
1

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

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

{ isEmailUnique: ложь, isPasswordStrongEnough: верно; }

Как я могу с проверкой knockoutjs показать эти ошибки аккуратным способом?

ответ

4

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

Первоначально взяты из knockout validation 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, где вы выполняете свой поиск, а затем возвращает истину или ложь в зависимости от результата запроса.

Чтобы использовать вышеописанный валидатор

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

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

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

+0

Я видел это сообщение в своем readme, но мне бы очень хотелось, чтобы все проверки на стороне сервера отправлялись с одним вызовом. Если регистрация прекрасна, вернитесь назад, верните те вещи, которые были неправильными. – NPehrsson

+1

В этом случае вы, вероятно, не должны использовать плагин проверки вообще для этого конкретного случая. Просто отправьте данные, которые вы хотите сохранить, и позаботьтесь о результатах. Если вы хотите поместить сообщения об ошибках рядом с полем, вызвавшим ошибку, вы должны определить для этого соглашение. Возможно, некоторые вычисленные наблюдаемые данные могут фильтровать проверку json или что-то, к чему вы можете привязать. Однако проверка нокаута не может помочь вам. –

+0

:(okeay, я хотел использовать другие вещи по мере необходимости и т. Д. Таким образом, нет возможности «запускать» ошибку проверки, когда я получаю результат с сервера? – NPehrsson

2

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

Смежные вопросы