O2OA API

source

x_component_process_Xform/SubSource.js

MWF.xDesktop.requireApp('process.Xform', '$Module', null, false);
//COMMON.AjaxModule.load("JSONTemplate", null, false);
/** @class SubSource 子数据源。
 * @o2cn 子数据源
 * @example
 * //可以在脚本中获取该组件
 * //方法1:
 * var subSource = this.form.get("fieldId"); //获取组件
 * //方法2
 * var subSource = this.target; //在组件本身的脚本中获取
 * @extends MWF.xApplication.process.Xform.$Module
 * @o2category FormComponents
 * @o2range {Portal}
 * @hideconstructor
 */
MWF.xApplication.process.Xform.SubSource = MWF.APPSubSource = new Class(
    /** @lends MWF.xApplication.process.Xform.SubSource# */
    {
        Extends: MWF.APP$Module,
        options: {
            /**
             * 加载数据后执行,但这时还未加载下属组件,可以可以使用this.target.data获取数据进行修改。
             * @event MWF.xApplication.process.Xform.SubSource#postLoadData
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            /**
             * 加载数据、下属组件后执行。
             * @event MWF.xApplication.process.Xform.SubSource#loadData
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            moduleEvents: ['queryLoad', 'postLoad', 'load', 'postLoadData', 'loadData'],
        },
        load: function () {
            /**
             * @ignore
             * @member parentLine
             * @memberOf MWF.xApplication.process.Xform.SubSource#
             */

            this._loadModuleEvents();
            this._queryLoaded();
            this._loadUserInterface();
            // this._loadStyles();
            //this._loadEvents();
            // this._loadDomEvents();

            this._afterLoaded();
        },
        _loadUserInterface: function () {
            if (!this.isReadable && !!this.isHideUnreadable){
                this.node?.addClass('hide');
                return;
            }

            this.loopNodes = [];
            this.subSourceItems = [];
            var node = new Element('div.subsource').inject(this.node, 'before');
            // var node = this.node.clone(false).inject(this.node, "before");
            // this.node.inject(node);
            this.loopNode = this.node.dispose();
            this.node = node;
            var id = node.get('id');
            node.set('id', '');
            this.node.set({
                id: id,
                mwftype: node.get('mwftype'),
            });
            this.node.store('module', this);
            this._loadJsonData();
        },
        _getSource: function () {
            var parent = this.node.getParent();
            while (
                parent &&
                parent.get('MWFtype') != 'source' &&
                parent.get('MWFtype') != 'subSource' &&
                parent.get('MWFtype') != 'subSourceItem'
            )
                parent = parent.getParent();
            return parent ? parent.retrieve('module') : null;
        },
        _getSourceData: function (sourceData) {
            var data = sourceData;
            if (this.json.jsonPath != '.') {
                var paths = this.json.jsonPath.split('.');
                paths.each(
                    function (p) {
                        data = data[p];
                    }.bind(this),
                );
            }
            /**
             * @summary 该属性获取当前子数据源的数据,当所在上级数据源加载完成后才有值。
             * @member {Array|Object|String|Number|Boolean|Null}
             * @example
             * var field = this.form.get("fieldId").data; //获取子数据源数据
             */
            this.data = data;
        },
        _loopSub: function (dom, i) {
            var _self = this;
            var moduleNodes = this.form._getModuleNodes(dom);
            moduleNodes.each(
                function (node) {
                    var json = this.form._getDomjson(node);
                    var subJson = Object.clone(json);
                    subJson.id = subJson.id + '_' + i;
                    node.set('id', subJson.id);

                    var module = this.form._loadModule(
                        subJson,
                        node,
                        function () {
                            if (_self.widget) this.widget = _self.widget;
                        },
                        true,
                    );
                    //this.modules.push(module);
                }.bind(this),
            );
        },
        _loopData: function () {
            var _self = this;
            this.data.each(
                function (d, i) {
                    var node = this.loopNode.clone(true, true);
                    node.inject(this.node);
                    var json = Object.clone(this.json);
                    json.id = json.id + '_' + i;
                    json.type = 'SubSourceItem';
                    node.set({
                        id: json.id,
                        mwftype: 'subSourceItem',
                    });

                    var module = this.form._loadModule(
                        json,
                        node,
                        function () {
                            if (_self.widget) this.widget = _self.widget;
                            this.data = d;
                            this.position = i;
                        },
                        true,
                    );
                    this.subSourceItems.push(module);
                    this.loopNodes.push(node);

                    this._loopSub(node, i);
                }.bind(this),
            );
        },
        _initSubSource: function () {
            if (this.loopNode) {
                var moduleNodes = this.form._getModuleNodes(this.node);
                moduleNodes.each(
                    function (node) {
                        var module = node.retrieve('module');
                        if (module) {
                            if (module.json.type == 'SubSource') {
                                module._initSubSource();
                            } else {
                                MWF.release(module);
                            }
                        }
                    }.bind(this),
                );
                this.node.empty();
            }
            this.loopNodes = [];
            this.subSourceItems = [];
        },
        _loadJsonData: function (notInit) {
            if (!notInit) this._initSubSource();
            this.source = this._getSource();
            if (this.source) {
                if (this.source.data) {
                    this._getSourceData(this.source.data);
                    this.fireEvent('postLoadData');
                    if (typeOf(this.data) !== 'array') this.data = [this.data];
                    if (typeOf(this.data) == 'array') {
                        this._loopData();
                        this.fireEvent('loadData');
                    } else {
                        var _self = this;
                        this.form._loadModules(
                            this.node,
                            function () {
                                if (_self.widget) this.widget = _self.widget;
                            },
                            true,
                        );
                    }

                    //this.tmpDiv = new Element("div");
                    //var html = "{loop:"+this.json.jsonPath+"}"+this.node.outerHTML+"{/loop:"+this.json.jsonPath+"}";
                    ////this.template = new Template();
                    ////var loopHtml = this.template.substitute("{"+this.json.jsonPath+"}", this.source.data);
                    //this.node.set("text", this.text);
                }
            }
        },
    },
);

MWF.xApplication.process.Xform.SubSourceItem = MWF.APPSubSourceItem = new Class({
    Extends: MWF.APP$Module,
    _loadUserInterface: function () {
        this.loopNodes = [];
        this.subSourceItems = [];
    },
});

results matching

    No results matching ''