Dojo表单.如何显示关于不正确填写的表单元素的错误,如dijit方法validate()所做的



我使用dojo表单并使用AJAX提交。我使用两种验证方法:在客户端和服务器端:

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 alert()方法。我希望在服务器端和客户端平等地显示验证错误。

对于每个服务器端错误,设置一个新的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)
})

最新更新