zoukankan      html  css  js  c++  java
  • form and basic

    /* 表单控件
    * 有二个模式:creating、editing、readonly,默认为editing
    *
    *
    */
    Ext.define('Ext.ux.form.Panel', {
        extend: 'Ext.form.Panel'
        , alias: 'widget.uxform'

        , mixins: {
            configurable: 'Ext.ux.util.Configurable'
        }

        , cfgModel: 'Ext.ux.configuation.ViewConfigModel'

        , formText: {
            saveSuccess: 'Save Successfully'
        }

        , config: {
            bodyStyle: 'padding:10px'
            , autoScroll: true
            , fieldDefaults: {
                labelAlign: 'right'
                , 380
                , msgTarget: 'side'
                , validateOnChange: false
                , plugins: [{ ptype: 'uxvalidation'}]
            }
            , create: false
        }

        /* @cfg {Number} columnCount 列数
        * Default is 2
        */
        , columnCount: 2
        /* @cfg {Boolean} autoMode 自动模式,根据{@Link queryParam}得到参数确定当前模式。
        * 如果url.search中没有键为{@Link queryParam}的参数,form将进入creating模式。
        * 如果{@Link create}为true,则不进行加载。
        * Default is false
        */
        , autoMode: false
        /* @cfg {String} queryParam 查询参数,多个参数使用&连接。
        * Default is id
        */
        , queryParam: 'id'
        /* @cfg {String/Array} model 模型名称。*/
        , model: Ext.emptyString
        /* @cfg {Boolean} create true则进入create模式。*/

        /* @override */
        , constructor: function (config) {
            var me = this;
            config = config || {};        
            me.initConfig(config);
            config = Ext.merge({
                layout: {
                    type: 'table',
                    columns: me.columnCount
                }
                , items: []
            }, config);
            me._items = config.items;
            config.items = []; //在loadConfigData中重新生成items
            me._autoMode = config.autoMode;
            me.callParent([config]);
            me.msgPanel = Ext.create('Ext.panel.Panel', {
                id: 'errorMsg'
                , hidden: true
                , bodyStyle: 'background-color: #F3D6D6'
                , dock: 'top'
            });
            me.addDocked(me.msgPanel);
            me._param = new Ext.util.MixedCollection();
            var search = Ext.ux.util.getSearch(), q = me.queryParam.split('&');
            Ext.Array.forEach(q, function (p) {
                if (!Ext.isEmpty(p) && !Ext.isEmpty(search[p]))
                    me._param.add(p, search[p]);
            });
            if (me.create || me._param.length == 0)
                me.createNewForm();
            if (me.remoteCfg && (me.cfgStore || me.cfgProxy || me.cfgData)) {
                me.loadConfig();
            } else {
                var data = [];
                Ext.Array.forEach(me._items, function (c) {
                    data.push({
                        data: {
                            Visible: true
                            , Configuration: c
                        }
                    });
                });
                me.loadConfigData(data);
            }
        }

        /**
        * @private
        * @override
        */
        , createForm: function () {
            var me = this, cfg = {}, props = me.basicFormConfigs,
                len = props.length, i = 0, prop;
            for (; i < len; ++i) {
                prop = props[i];
                cfg[prop] = me[prop];
            }
            var model = [];
            if (Ext.isString(me.model))
                model.push(me.model);
            else if (Ext.isArray(me.model))
                model = me.model;
            cfg.model = model;
            return new Ext.ux.form.Basic(me, cfg);
        }
        /*@private*/
        , loadConfigData: function (records) {
            var me = this;
            me.form.loadConfigData(records);
            if (me._autoMode && me._param.length > 0) {
                var query = {};
                me._param.eachKey(function (k, v) {
                    query[k] = v;
                });
                me.loadForm({ params: query });
            }
        }
        /*@private*/
        , showConfigError: function (msg) {
            var item = Ext.ComponentManager.create({ html: '<span>' + this.configErrorText + ':<br/>' + msg + '</span>', border: false }, 'container');
            this.add(item);
        }
        /**
        *   在creating模式保存后需要调用此方法转换成editing模式,调用{@link submitForm}后会自己调用此方法
        */
        , toEditMode: function () {
            this.form.changeMode(this.form.mode.editing);
        }
        /**
        *   获取当前模式:'creating'、'editing'、'readonly'
        */
        , getCurrentMode: function () {
            return this.form.currentMode;
        }


        , loadModel: function (model) {
            this.form.loadModel(model);
        }
        , updateModel: function (modelName) {
            this.form.updateModel(modelName);
        }
        , getModel: function (modelName) {
            return this.form.getModel(modelName);
        }

        , createNewForm: function () {
            this.form.createNewForm();
        }
        , copyForm: function () {
            this.form.copyForm();
        }
        , loadForm: function (options) {
            this.form.loadForm(options);
        }
        , submitForm: function (options) {
            this.form.submitForm(options);
        }
        , resetForm: function () {
            this.form.resetForm();
        }
    })

    ---------------------------basic--------------------------------------

    /**
    * 项目用到的form的内置类,提供form基本的功能.
    *
    * @class Ext.ux.form.Basic
    * @extends Ext.form.Basic
    */
    Ext.define('Ext.ux.form.Basic', {
        extend: 'Ext.form.Basic'

        /* @private */
        , _models: new Ext.util.MixedCollection()
        , _rawModels: new Ext.util.MixedCollection()

        , mode: {
            creating: 'creating'
            , editing: 'editing'
            , readonly: 'readonly'
        }

        , currentMode: 'editing'

        , changeMode: function (m) {
            if (this.currentMode != this.mode[m]) {
                this.currentMode = this.mode[m];
                if (Ext.isArray(this._configData))
                    this.loadConfigData(this._configData);
            }
        }

        , loadForm: function (options) {
            return this.doAction('uxload', options);
        }

        , submitForm: function (options) {
            options = options || {};
            return this.doAction('uxsubmit', options);
        }
        , createNewForm: function () {
            var me = this;
            me.changeMode(me.mode.creating);
            Ext.Array.forEach(me.model, function (m) {
                var model = Ext.ModelManager.getModel(m);
                me.loadModel(model.create());
            });
        }
        , copyForm: function () {
            var me = this;
            me.changeMode(me.mode.creating);
            me._rawModels.each(function (m) {
                var rec = m.copy();
                rec.setId(null);
                Ext.data.Model.id(rec);
                me.loadModel(rec);
            });
        }

        , clearInvalid: function () {
            var me = this;
            me.owner.msgPanel.hide();
            me.getFields().each(function (f) {
                f.clearInvalid();
            });
        }

        , resetForm: function () {
            var me = this;
            me.clearInvalid();
            me._rawModels.each(function (m) {
                me.setValuesByModel(m);
            });
        }

        /*
        * 读取model数据到form
        */
        , loadModel: function (model) {
            var me = this;
            me.clearInvalid();
            function setModel(m) {
                if (me._models.containsKey(m.modelName))
                    me._models.replace(m.modelName, m);
                else
                    me._models.add(m.modelName, m);
                if (me._rawModels.containsKey(m.modelName))
                    me._rawModels.replace(m.modelName, m.copy());
                else
                    me._rawModels.add(m.modelName, m.copy());
                me.setValuesByModel(m);
            }
            if (Ext.isArray(model)) {
                for (var m in model) {
                    setModel(m);
                }
            } else
                setModel(model);
        }

        , updateModel: function (modelName) {
            var me = this;
            me._models.each(function (m) {
                if (Ext.isEmpty(modelName) || modelName == m.modelName) {
                    var val = {};
                    val = me.getValuesByModel(m.modelName);
                    m.beginEdit();
                    m.set(val);
                    m.endEdit();
                }
            });
            return this;
        }

        , getModel: function (modelName) {
            var me = this;
            if (!Ext.isEmpty(modelName))
                return me._models.get(modelName);
            else {
                var lst = [];
                Ext.Array.forEach(me.model, function (m) {
                    lst.push(me._models.get(m));
                });
                return lst;
            }
        }

        /**
        * 只给相应的类的字段赋值
        * @param {Ext.data.Model} model 要赋值给form的model
        * @method setValuesByModel
        * @return {Ext.form.Basic} The Ext.form.Basic
        */
        , setValuesByModel: function (model) {
            var fields = this.getFields();
            fields.filterBy(function (item) {
                return item.getName().match(new RegExp("^" + model.modelName + "."));
            }, this).each(function (field) {
                field.setValue(model.get(field.getName().substring(model.modelName.length + 1)));
            }, this)
            return this;
        }


        /**
        * 只获取对应类的字段的值
        * @param {String} modelName 类名
        * @method getValuesByModel
        * @return {object} 获取到的对象
        */
        , getValuesByModel: function (modelName, notAllowEmpty) {
            var fields = this.getFields(), ret = {};
            fields.filterBy(function (item) {
                return item.getName().match(new RegExp("^" + modelName + "."));
            }, this).each(function (field) {
                if (field.getName()) {
                    var val = field.getValue();
                    if (!Ext.isEmpty(val) || !notAllowEmpty) {
                        ret[field.getName().substring(modelName.length + 1)] = val;
                    }
                }
            }, this)
            return ret;
        }


        , isValid: function () {
            this.owner.msgPanel.hide();
            var isValid = this.callParent(arguments), errors = {};
            if (!isValid) {
                this.getFields().each(function (f) {
                    if (!f.isValid()) {
                        errors[f.getFieldLabel()] = f.getErrors();
                    }
                });
                this.showErrors(errors);
            }
            return isValid;
        }

        /**
        * 在信息面板显示错误信息
        * @method showErrors
        * @param {Object} errors {错误:错误信息...}
        */
        , showErrors: function (errors) {
            var me = this;
            function getErrHtml(errs) {
                var html = "<ul style='color:#BA1717'>";
                function renderLi(arr) {
                    var ret = "";
                    for (var i = 0; i < arr.length; i++) {
                        ret += "<span>" + arr[i] + "</span>";
                    }
                    return ret;
                };
                function findField(name) {
                    return me.getFields().findBy(function (f) {
                        return f.getName().match(new RegExp(name + '$'));
                    });
                }
                if (Ext.isString(errs)) {
                    Ext.Array.forEach(errs.split('|'), function (e) {
                        if (!Ext.isEmpty(e)) {
                            var f = e.split(':');
                            if (f.length > 1) {
                                var t = f[0], field = findField(t);
                                if (field) {
                                    t = field.getFieldLabel();
                                    field.setActiveError(f[1]);
                                }
                                html += "<li>" + t + ":<span>" + f[1] + "</span></li>";
                            }
                            else
                                html += "<li><span>" + e + "</span></li>";
                        }
                    });
                } else {
                    for (var v in errs) {
                        if (!Ext.isEmpty(errs[v])) {
                            html += "<li>" + v + ":<span>" + renderLi(errs[v]) + "</span></li>";
                        }
                    }
                }
                html += "</ul>";
                return html;
            };
            var html = getErrHtml(errors);
            me.owner.msgPanel.update(html);
            me.owner.msgPanel.show();
        }

        , loadConfigData: function (records) {
            this._configData = records;
            var o = this.owner;
            o.suspendLayouts();
            o.items.each(function (i) {
                o.remove(i);
            });
            Ext.each(records, function (item) {
                this.addColumn(item.data);
            }, this);
            o.resumeLayouts(true);
        }

        /* @protected */
        , addColumn: function (obj) {
            var me = this, cfg;
            try {
                if (Ext.isObject(obj['Configuration']))
                    cfg = obj['Configuration'];
                else {
                    if (!obj['Visible']) return;
                    eval('cfg = {' + obj['Configuration'] + '}');
                    cfg.fieldLabel = obj['HeaderText'];
                    cfg.name = obj['DataField'];
                    cfg.xtype = obj['XType'];
                    cfg.itemId = obj['ItemId'];
                    cfg.hidden = false;
                }
            }
            catch (e) {
                //<debug>
                Ext.Error.raise("Error in Ext.ux.form.Basic's addColumn");
                //</debug>
            }
            var cmp = Ext.clone(this.owner.fieldDefaults);
            Ext.merge(cmp, cfg || {});
            Ext.Array.forEach(me.owner._items, function (i) {
                if (i.itemId == cmp.itemId) {
                    cmp = Ext.merge(i, cmp);
                }
            });
            if (me.currentMode == me.mode.editing && cfg.readonly)
                cmp.xtype = 'uxdisplayfield';
            cmp.hidden = me.currentMode != me.mode.editing && cfg.insertVisible === false;
            cmp.width = cmp.width * (cmp.colspan || 1);
            if (cfg.name)
                cmp.name = cfg.name.indexOf('.') > 0 || Ext.isEmpty(me.model) ? cfg.name : me.model[0] + '.' + cfg.name;
            var item = Ext.ComponentManager.create(cmp);
            me.owner.add(item);
        }
    })

  • 相关阅读:
    移除TDE
    SQL Server 聚集索引和非聚集索引的区别
    Serivce Broker 简单实用
    SQL Server 2012 ColumnStore索引测试
    UISegmentedControl的所有操作总结
    iPhone开发之深入浅出 — ARC之前世今生(三)
    什么是 ARC?ios5,xcode 4.2
    Present ViewController详解
    UITextField的总结
    iPhone开发资料之内存管理 ,循环引用导致的内存问题
  • 原文地址:https://www.cnblogs.com/shen119/p/3323580.html
Copyright © 2011-2022 走看看