⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valuesmanager.js

📁 javascript 很酷的类库
💻 JS
📖 第 1 页 / 共 5 页
字号:
    // Assume onely one fileItem per member form - on saveData(), we'll grab the fileItemForm    // from our member form and use it to submit all our values.    getFileItemForm : function () {        var hasFileItemForm = false, fileItemForm;        for (var i = 0; i < this.members.length; i++) {            var form = this.members[i].getFileItemForm();            if (form) {                if (hasFileItemForm) {                    this.logWarn("ValuesManager defined with more than one member form " +                            " containing a FileItem. This is not supported - binary data may " +                            "only be uploaded from one FileItem when saving ValuesManager data");                                              } else {                    fileItemForm = form;                    hasFileItemForm = true;                }            }        }        return fileItemForm;    },        // Validation:        //> @method valuesManager.validate()    // Validate the current set of values for this values manager against validators defined    // in the member forms. For databound valuesManagers, also perform validation against any    // validators defined on datasource fields.    // <P>    // Note that if validation errors occur for a value that is not shown in any member forms,    // those errors will cause a warning and +link{handleHiddenValidationErrors()} will be    // called.  This can occur if:<br>    // - A datasource field has no correspending item in any member form<br>    // - The item in question is hidden<br>    // - The member form containing the item is hidden.    //    // @return  (boolean)   true if all validation passed    // @visibility external    // @example formSplitting    //<    validate : function () {        // Just bail if client-side validation is disabled.        // Note that we'll still show the errors returned from a failed server save due to        // 'setErrors' behavior        if (this.disableValidation) return true;            // clear hidden errors before starting any validation run        this.clearHiddenErrors();            // For databound valuesManagers, each member form will be responsible for validating        // the fields it shows, and the valueManager will validate the rest.        var returnVal = true,            // fields are returned from ds in {fieldName:fieldObject} format            dsFields = this.dataSource ? isc.addProperties({}, this.getDataSource().getFields())                                        : null,            validators = {};        // First go through all the member forms and perform validation.                    if (this.members) {            for (var i = 0; i < this.members.length; i++) {                var form = this.members[i],                    items = this.members[i].getItems();                                                        // we don't want any user-defined handleHiddenValidationErrors to fire on the                 // form - instead well fire this method at the valuesManager level only.                // Implement this by applying our own 'handleHiddenValidationErrors' method to                // the form that notifies us what the errors were.                if (form.handleHiddenValidationErrors != null) {                    this.logInfo("form level 'handleHiddenValidationErrors' method suppressed " +                                 "in favor of valuesManager level handler", "validation");                    form._prevHHVE = form.handleHiddenValidationErrors;                }                form.handleHiddenValidationErrors = this._handleHiddenFormErrors;                                    for (var j = 0; j < items.length; j++) {                    var fieldName = items[j].getFieldName();                    // IF the form shares a dataSource with this VM instance,                     // remove the appropriate field from our copy of the dataSource fields -                     // we have already validated this value.                                        if (dsFields && this.members[i].getDataSource() == this.getDataSource())                         delete dsFields[fieldName];                }                // Allow the form to perform its own validation.                // Validate hidden fields (makes sense since we validate hidden forms!)                // Pass the additional param to suppress validating DS fields for which there                // are no items though, since we handle these at the VM level.                // This will also display validation errors, or fire the method to handle                // validation errors while hidden.                var formSuccess =  form.validate(true, true)                returnVal = (returnVal && formSuccess);                                if (form._preHHVE) form.handleHiddenValidationErrors = form._preHHVE;                else delete form.handleHiddenValidationErrors;                                // If the form is hidden, add its full set of errors to our hidden form                 // validation errors object.                // Note that if there were fields marked as hidden within the form, we already                // stored those -- this will override that object with the entire set of                // errors for the form.                if (!formSuccess && !(form.isDrawn() && form.isVisible())) {                    this.addHiddenErrors(form.errors, form)                }            }        }        // we now have to perform validation on the DS fields not present in any member form        var values = this.getValues(),            errors = {};        for (var fieldName  in dsFields) {                   var fieldObject = dsFields[fieldName],               validators = fieldObject.validators,               required = fieldObject.required,               value = values[fieldName];            if (required && value == null) {                // handle this type of error                if (errors[fieldName] == null) errors[fieldName] = [];				errors[fieldName].add(isc.Validator.requiredField);                            } else if (validators != null) {                var value = values[fieldName];                // iterate through the validators again, this time actually checking each one                for (var i = 0; i < validators.length; i++) {                    // validators is an array of validator objects, each of which has the form                    //    {type:"validatorType", errorMessage:"message", optionalParam:"", ...}                    var validator = validators[i];                    if (!validator) continue;                    // Unless we're looking at a 'requiredIf' field, don't try to validate                    // null values.                    if (validator.type != "requiredIf" && value == null) {                        continue;                    }                    // we have no item, so pass the field object to processValidator()                    // This roughly matches what we do in ListGrid validation                    if (!this.processValidator(fieldObject, validator, value)) {                        if (errors[fieldName] == null) errors[fieldName] = [];                        var errorMessage = validator.errorMessage || this.unknownErrorMessage;                        errors[fieldName].add(errorMessage);                    }                }            }                        // for consistency with forms - if we got a single error, store as a string, not            // a single element array            if (errors[fieldName] && errors[fieldName].length == 1) errors[fieldName] = errors[fieldName][0];                    }               // add hidden errors from fields that are not associated with any form.                this.addHiddenErrors(errors);        // This method will show hidden errors from member forms or from the VM fields.                this._handleHiddenValidationErrors(true);        if (isc.getKeys(errors).length > 0)  returnVal = false;        return returnVal;    },        //> @method ValuesManager.getValidatedValues()    // Call +link{valuesManager.validate()} to check for validation errors. If no errors are found,    // return the current values for this valuesManager, otherwise return null.    // @return (object|null) current values or null if validation failed.    // @group errors    // @visibility external    //<     getValidatedValues : function () {        if (!this.validate()) return null;        return this.getValues();    },             // Handler for hidden form validation errors. This method is applied directly to the     // member form    _handleHiddenFormErrors : function (errors) {        var vm = this.valuesManager;        vm.addHiddenErrors(errors, this);        return false;   // suppress the standard warning    },            clearHiddenErrors : function () {        delete this.hiddenErrors;    },    // addHiddenErrors()    // For a valuesManager, hidden validation errors may come from:    // - a field in the dataSource not associated with any member form item    // - a hidden item in a member form    // - a hidden or undrawn member form.        addHiddenErrors : function (errors, form) {        if (errors == null || isc.isAn.emptyObject(errors)) return;                if (!this.hiddenErrors) this.hiddenErrors = {};        if (form) {            if (isc.isA.Canvas(form)) form = form.getID();        } else form = this.getID();                if (!this.hiddenErrors[form]) this.hiddenErrors[form] = {};                    for (var fieldName in errors) {            this.hiddenErrors[form][fieldName] =                 this._addFieldErrors(this.hiddenErrors[form][fieldName], errors[fieldName]);        }    },        // Returns the current snapshot of hidden errors in a flat list    getHiddenErrors : function (suppressSynch) {        if (!suppressSynch) {            this.synchHiddenErrors();        }                if (!this.hiddenErrors) return null;        var flatErrors = {};        for (var form in this.hiddenErrors) {            isc.addProperties(flatErrors, this.hiddenErrors[form]);        }        return flatErrors;    },            // synchHiddenErrors()    // This is a method to ensure that our 'hiddenErrors' object returned by getHiddenErrors()    // and passed to handleHiddenValidationErrors is in synch with the current set of     // visible forms / items.    // Required in the case where     // - setErrors() was called,     // - form/item visibility was changed,     // - showErrors() called.        synchHiddenErrors : function () {                var hiddenErrors = this.hiddenErrors,            vmID = this.getID();                            // Logic for errors that occurred on fields with no associated member form item         // (when errors were stored)        if (hiddenErrors && hiddenErrors[vmID]) {            for (var field in hiddenErrors[vmID]) {                var errors = hiddenErrors[vmID][field],                    item = this.getItem(field),                    memberForm = item ? item.form : null;                                    // If there is now an associated member form item, we need to add the                // field error to the form, and update this.hiddenErrors                if (item) {                    memberForm.addFieldErrors(field, errors);                    // clear out the hidden error under the valuesManager's ID - the error                    // is now associated with a form.                    delete hiddenErrors[vmID][field];                }            }        }                // Update hidden errors for each form.        // Quickest to just re-generate hidden errors per form rather than trying to synch with         // existing stored hiddenErrors object.        var vmErrors = hiddenErrors[vmID];        hiddenErrors = this.hiddenErrors = {};        if (vmErrors) hiddenErrors[vmID] = vmErrors;        // Now iterate through every member's errors and add to hidden members arrays if         // necessary        if (this.members) {            for (var i = 0; i< this.members.length; i++) {                var member = this.members[i],                    memberID = member.getID(),                    memberErrors = member.errors;                if (!memberErrors || isc.isAn.emptyObject(memberErrors)) continue;                                // shortcut - if the form is hidden always store all its errors. This may                // overwrite an already up to date this.hiddenErrors[formID] but is quicker                // than iterating through the errors doing comparisons.                if (!member.isVisible() || !member.isDrawn()) {                    memberErrors = isc.addProperties({}, memberErrors);                    hiddenErrors[memberID] = memberErrors;                } else {                    // catch items that have been hidden or removed                    for (var field in memberErrors) {                        var item = member.getItem(field);                        if (!item) {                            if (!hiddenErrors[vmID]) hiddenErrors[vmID] = {};                            hiddenErrors[vmID][field] = memberErrors[field];                            // just delete the field from the form's errors object                            delete memberErrors[field];                                                    } else if (!item.visible) {                            if (!hiddenErrors[memberID]) hiddenErrors[memberID] = {};                            hiddenErrors[memberID][field] = memberErrors[field];                        }                    }                }            }        }            },    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -