Страница просмотра справочника

Добрый день, есть задача по нажатию на кнопку должна отображаться страница с содержимым справочника в виде реестра без возможности редактирования, подскажите как это можно реализовать.

Нравится

8 комментариев

По кнопке вызывать свой модуль, в модуле описать грид, коллекцию грида забиндить на содержимое какого-либо справочника. я бы так сделал)

"Варфоломеев Данила" написал:

По кнопке вызывать свой модуль, в модуле описать грид, коллекцию грида забиндить на содержимое какого-либо справочника. я бы так сделал)


Добрый день Данила, а как вызывать модуль?

Вот пример работы модуля модального окна:

Модуль:

 define("UsrMyModalModule", ["ModalBox", "BaseSchemaModuleV2"],
        function(ModalBox) {
    Ext.define("Terrasoft.configuration.UsrMyModalModule", {
        extend: "Terrasoft.BaseSchemaModule",
        alternateClassName: "Terrasoft.UsrMyModalModule",
        /**
         * @inheritDoc Terrasoft.BaseSchemaModule#generateViewContainerId
         * @overridden
         */
        generateViewContainerId: false,
        /**
         * @inheritDoc Terrasoft.BaseSchemaModule#initSchemaName
         * @overridden
         */
        initSchemaName: function() {
            this.schemaName = "UsrMyModalPage";
        },
        /**
         * @inheritDoc Terrasoft.BaseSchemaModule#initHistoryState
         * @overridden
         */
        initHistoryState: Terrasoft.emptyFn,
    });
    return Terrasoft.UsrMyModalModule;
});

Страница модального окна:

define("UsrMyModalPage", ["ModalBox"], function(ModalBox) {
    return {
        attributes: {
            "TestText": {
                dataValueType: Terrasoft.DataValueType.TEXT,
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
            }
        },
        messages: {
            "DataFromModal": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function(callback, scope) {
                this.callParent(arguments);
            },
            onRender: function() {
            },
            onCloseButtonClick: function() {
                this.sandbox.publish("DataFromModal", { test: this.get("TestText") }, [this.sandbox.id]);
                ModalBox.close();
            }
        },
        diff: [
            {
                "operation": "insert",
                "name": "MyContainer",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTAINER,
                    "items": []
                }
            },
            {
                "operation": "insert",
                "parentName": "MyContainer",
                "propertyName": "items",
                "name": "MyGridContainer",
                "values": {
                    "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                    "items": []
                }
            },
            {
                "operation": "insert",
                "parentName": "MyGridContainer",
                "propertyName": "items",
                "name": "TestText",
                "values": {
                    "bindTo": "TestText",
                    "caption": "Test text",
                    "layout": {"column": 0, "row": 0, "colSpan": 10}
                }
            },
            {
                "operation": "insert",
                "parentName": "MyGridContainer",
                "name": "CloseButton",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,
                    "click": {bindTo: "onCloseButtonClick"},
                    "markerValue": "CloseButton",
                    "caption": "OK",
                    "layout": { "column": 0, "row": 1, "colSpan": 3 }
                }
            }
        ]
    };
});

Вызов из карточки:

define("ContactPageV2", ["ContactPageV2Resources", "GeneralDetails", "ModalBox"],
function(resources, GeneralDetails, ModalBox) {
    return {
        entitySchemaName: "Contact",
        messages: {
            "DataFromModal": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.SUBSCRIBE
            }
        },
        details: /**SCHEMA_DETAILS*/{
        }/**SCHEMA_DETAILS*/,
        methods: {
            subscribeSandboxEvents: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("DataFromModal", function(arg) {
                    console.log("msg from modal: " + arg.test);
                }, this, [this.sandbox.id + "_" + "UsrMyModalModule"]);
            },
            loadMyModal: function() {
                var sandbox = this.sandbox;
                var config = {
                    heightPixels: 420,
                    widthPixels: 750
                };
                var moduleName = "UsrMyModalModule";
                var moduleId = sandbox.id + "_" + moduleName;
                var renderTo = ModalBox.show(config, function() {
                    sandbox.unloadModule(moduleId, renderTo);
                });
                sandbox.loadModule(moduleName, {
                    id: moduleId,
                    renderTo: renderTo
                });
            },
            onMyClick: function() {
                this.loadMyModal();
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
            }
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "parentName": "CombinedModeActionButtonsCardContainer",
                "propertyName": "items",
                "name": "MainContactButton",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": "пыщь-пыщь",
                    "click": {"bindTo": "onMyClick"}
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

В примере, страница модального окна это «Схема модели представления карточки», без указания родительской схемы.
Модуль модального окна это «Модуль», с одной единственной зависимостью на вышесозданную страницу.

"Максим Шевченко" написал:
Спасибо Максим

Максим а как вывести реестр в модальное окно? пробовал указывать родительский объект и схему ничего не вышло

в событие "DataFromModal" - передайте ваш this целиком, в таком случае в последствии получив его сможете получить доступ и к его модели и к "GridData"

"Севостьянов Илья Сергеевич" написал:

в событие "DataFromModal" - передайте ваш this целиком, в таком случае в последствии получив его сможете получить доступ и к его модели и к "GridData"


Илья Вы немного не правильно поняли, я хочу в модальном окне отобразить реестр без возможности редактирования, сделал через esq, а результат пытаюсь записать в gridata но возникает ошибка "message: Cannot read property 'each' of null "
код js

define("UsrMyModalPage", ["ModalBox"], function (ModalBox) {
    return {
        attributes: {
            "GridDataTest": { dataValueType: Terrasoft.DataValueType.COLLECTION },
        },
        messages: {
            "DataFromModal": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function (callback, scope) {
                this.callParent(arguments);
 
                var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                    rootSchemaName: "UsrPLP"
                });
                esq.addColumn("Name");
                esq.addColumn("UsrPoints");
 
                esq.getEntityCollection(function (result) {
                    if (!result.success) {
                        this.showInformationDialog("Ошибка запроса данных");
                        return;
                    }
                    this.set("GridDataTest", result.collection);
                }, this);
            },
            onCloseButtonClick: function () {
                ModalBox.close();
            }
        },
        diff: [
            {
                "operation": "insert",
                "name": "MyContainer",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTAINER,
                    "items": []
                }
            },
            {
                "operation": "insert",
                "parentName": "MyContainer",
                "propertyName": "items",
                "name": "MyGridContainer",
                "values": {
                    "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                    "items": []
                }
            },
             {
                 "operation": "insert",
                 "name": "DataGrid",
                 "parentName": "MyContainer",
                 "propertyName": "items",
                 "values": {
                     "itemType": Terrasoft.ViewItemType.GRID,
                     "listedZebra": true,
                     "collection": { "bindTo": "GridDataTest" },
                 }
 
             },
            {
                "operation": "insert",
                "parentName": "MyGridContainer",
                "name": "CloseButton",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,
                    "click": { bindTo: "onCloseButtonClick" },
                    "markerValue": "CloseButton",
                    "caption": "Close",
                    "layout": { "column": 0, "row": 1, "colSpan": 3 }
                }
            }
        ]
    };
});

"Головачев Дмитрий Александрович" написал:Cannot read property 'each' of null "

Вероятно не хватает миксина или какого-то метода, посмотрите в сторону: BaseLookupPageV2
которая тоже является модальным окном и не наследуется ни от кого, весь её код для работы грида прописан в ней же.

Показать все комментарии