2016-11-24 6 views
0

Я пытаюсь добавить пользовательскую проверку на стороне клиента в поле ввода на странице checkout/address компании Spree. Итак, вот что я сделал до сих пор:Добавление пользовательских проверок формы со стороны в Spree frontend

  1. Добавить вход в форму (здесь с помощью Haml & SimpleForm):

    = form.input :vat_number, label: Spree.t(:vat_number) 
    
  2. Внутри моей vendor/assets/javascripts/spree/frontend/checkout/address.js.coffee, добавить JQuery проверки метод и вставить правило в validate() вызова:

    ($).validator.addMethod "vatNumber", (value, element) -> 
        return false 
    , "Something wrong!" 
    
    Spree.onAddress =() -> 
        if ($ '#checkout_form_address').is('*') 
    
        ($ '#checkout_form_address').validate({ 
        rules: { 
         order_bill_address_attributes_vat_number: { 
         vatNumber: true 
         } 
        } 
        }) 
    
        # ... rest of the file ... 
    

Валидатор, похоже, не работает в поле vat_number, хотя остальные валидации формы работают. В консоли отладки , если я нахожу $.validator.methods, я вижу новый метод vatNumber, поэтому проблема должна быть либо в том, что я вызываю validate(), либо что-то связанное с тем, что я использую SimpleForm.

Я изменил код вокруг validate() вызова к этому:

($ '#order_bill_address_attributes_vat_number').rules("add", {vatNumber: true}) 
($ '#checkout_form_address').validate() 

И я получил следующее сообщение об ошибке в окне javascript консоли:

TypeError: undefined is not an object (evaluating '$.data(element.form,"validator").settings') 

Кто-нибудь пытался это сделать?

ответ

0

Я понял, в чем проблема.

По-видимому, метод vatNumber был добавлен после того, как Spree.onAddress вызывается в нижней части файла address.js.coffee.

Я переехал addMethod вызов в другое место (где я знаю, что это называется/запустить перед кодом в address.js.coffee и вдруг работал.

Теперь мне интересно, если это CoffeeScript вещь. Может порядок изменения кода после преобразования кода в Javascript?