2013-11-21 3 views
0

Я пытаюсь использовать обработчик привязки с Knockout и jQuery Validate, но когда я отправляю форму, перезагрузка страницы не проверяет и не вызывает метод в моей модели представления.Knockout jQuery Validate binding Handler

Может ли кто-нибудь сказать мне, что я пропущу, пожалуйста?

Вот мой связывании

ko.bindingHandlers.validateEmailForm = { 
     update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {  
      $(element).validate({ 
       errorLabelContainer: $("#updateEmailFormAlert"), 
       wrapper: 'li', 
       rules: { 
        email: { 
         required: true,       
         email: true 
        }, 
        emailConfirm: {             
         email: true, 
         equalTo: "#email",      
        } 
       }, 
       messages: { 
        email: { 
         required: "Email is required", 
         email: "Please enter a valid email address" 
        }, 
        emailConfirm: { 
         required: "Confirm Email is required", 
         email: "Please enter a valid confirm email address", 
         equalTo: "Confirm Email must match Email" 
        } 
       }, 
       submitHandler: function() { 
        viewModel.updateUserEmail(); 
       } 
      }); 
     }  
    }; 
+0

Я не знаком с Нокаут; что такое 'update:' должно быть? Если это поможет вам, имейте в виду, что '.validate()' является _initialization_ методом плагина и получает вызов _once_ в событии готовности DOM. В этот момент проверка выполняется автоматически с помощью различных событий мыши. – Sparky

+0

Обновление используется для применения плагинов jquery или добавления к элементу после того, как Knockout выполнил его привязку. Это связывание позволяет мне добавить простой атрибут в мою форму data-bind = "validateEmailForm: {}", который будет автоматически запускать обновляемый код после завершения привязки. –

ответ

0

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

var userViewModel = new UsersViewModel(); 
ko.applyBindings(userViewModel); 

Тогда в моей submitHandler

// activate the jQuery Validate on the form 
    ko.bindingHandlers.validateEmailForm = { 
     update: function(element, valueAccessor, allBindingsAccessor, data, bindingContext) {  
      $(element).validate({ 
       errorLabelContainer: $("#updateEmailFormAlert"), 
       wrapper: 'li', 
       rules: { 
        email: { 
         required: true,       
         email: true 
        }, 
        emailConfirm: {             
         email: true, 
         equalTo: "#email",      
        } 
       }, 
       messages: { 
        email: { 
         required: "Email is required", 
         email: "Please enter a valid email address" 
        }, 
        emailConfirm: { 
         required: "Confirm Email is required", 
         email: "Please enter a valid confirm email address", 
         equalTo: "Confirm Email must match Email" 
        } 
       }, 
       submitHandler: function() { 
        userViewModel.updateUserEmail(data); 
        return false; 
       } 
      }); 
     }  
    };