Показать сообщение отдельно
  #1 (permalink)  
Старый 18.12.2012, 14:37
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Почему не работает функция? Редактировать
Здравствуйте. Подскажите пожалуйста.
Есть код, который проверяет поле формы, который находится в контроллере.
var exports = this;
jQuery(function ($) {
    exports.RegistrationForm = Controller.create({
        elements: {
            "input[name='email']" : "emailInput",
            "form" : "registrationForm"
        },

        init: function (element) {
            this.el = $(element);
            this.refreshElements();
            this.registrationForm.submit(this.proxy(this.email));
        },

        email: function () {
            //alert("Searching: " + this.emailInput.val());
            this.email = this.emailInput.val();
            this.get_validator(this.email);
            return false;
        },

        $: function (selector) {
            return $(selector, this.el)
        },

        refreshElements: function () {
            for (var key in this.elements)
            {
                this[this.elements[key]] = this.$(key);
            }
        },

        get_validator: function (values) {
            var validator = {
                types: {},
                messages: [],
                config: {},
                validate: function (data) {
                    var i, msg, type, checker, result_ok;
                    this.messages = [];

                    for (i in data)
                    {
                        if (data.hasOwnProperty(i))
                        {
                            type = this.config[i];
                            checker = this.types[type];

                            if (!type) {
                                continue; // no need to validate
                            }
                            if (!checker) {
                                throw {
                                    name:"ValidationError",
                                    message:"No handler to validate type " + type
                                };
                            }

                            result_ok = checker.validate(data[i]); // ВОТ ЭТА ФУНКЦИЯ НЕ ОТРАБАТЫВАЕТ!!!

                            if (!result_ok) {
                                msg = "Invalid value for *" + i + "*, " + checker.instructions;
                                this.messages.push(msg);
                            }
                        }
                    }

                    return this.hasErrors();
                },

                // helper
                hasErrors:function () {
                    return this.messages.length !== 0;
                }
            };

            validator.types.isNonEmpty = {
                validate: function (values) {
                    return value !== "";
                },
                instructions: "The value cannot be empty"
            };


            var data = {
                //email: values
                email: "Super"
            };

            validator.config = {
                email: "isNonEmpty"
            };

            validator.validate(data);

            if (validator.hasErrors())
                alert(validator.messages.join("\n"));
        }
    });

    new RegistrationForm('#registration_block');
});

Код работает. кроме одной строчки, в которой я добавил комментарий. Почему я не могу вызвать функцию, в которой нахожусь? Если код отделить от контроллера, и создать отдельный объект validate, то все работает супер! Подскажите пожалуйста, срочно нужна помощь!
Спасибо огромное!
Ответить с цитированием