Формы Додзё Как показать ошибки о некорректно заполненных элементах формы, как делает метод dijit validate ()? - PullRequest
2 голосов
/ 25 марта 2012

Я использую формы Dojo и отправляю сообщения с использованием AJAX. Я использую 2 метода проверки: на стороне клиента и на стороне сервера:

dojo.connect(form, "onsubmit", function(event){
    dojo.stopEvent(event);

    var digit_form = dijit.byId("user_profile_form");
    if (!digit_form.validate()) {
        return false;
    }
//  client-side validation is ok, so we submit form using AJAX

    var xhrArgs = {
        form: form,
        handleAs: "json",
        load: function(responseText){
            // here I get response from server
            // and if there are errors on server
            // responseText object contains array with errors, so I
            // need to show this errors to user 
        },
        error: function(error) {
        }
    }

    var deferred = dojo.xhrPost(xhrArgs);
}

Проблема в том, что метод validate () показывает хорошие сообщения об ошибках пользователю, но когда я получаю ошибки от сервера, я не могу отображать ошибки, как метод validate (), поэтому я использую нативное предупреждение JavaScript () метод, который не так хорош. Я хотел бы, чтобы на экране сервера и клиента отображалось одинаковое количество ошибок.

1 Ответ

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

Для каждой ошибки на стороне сервера установите новое свойство widget.SSError.

error: function(error) {
    widget.set('SSError','The value is invalid because server thought so...'
    form.validate();
}

Переопределите функцию widget.isValid() и заставьте ее проверить новое свойство widget.SSError.

На основании этого сообщения ,

var myCustomFS = dojo.declare(dijit.form.FIlteringSelect, {
    postMixInProperties: function() {
        this.inherited(arguments);

        // Point _isValidOld at the function isValid currently points at
        this._isValidOld = this.isValid;

        // Point isValid at a new function
        this.isValid = function() {
            if (this.SSError) {
                return false;
            }
            return this._isValidOld(); // Calls the original isValid function
        }
    }
};

Установите часы на значение и сбросьте widget.SSError при его изменении.

widget.watch('value', function(){
    widget.set('SSError', false)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...