Добрый день, есть задача по нажатию на кнопку должна отображаться страница с содержимым справочника в виде реестра без возможности редактирования, подскажите как это можно реализовать.
Нравится
По кнопке вызывать свой модуль, в модуле описать грид, коллекцию грида забиндить на содержимое какого-либо справочника. я бы так сделал)
"Варфоломеев Данила" написал:По кнопке вызывать свой модуль, в модуле описать грид, коллекцию грида забиндить на содержимое какого-либо справочника. я бы так сделал)
Добрый день Данила, а как вызывать модуль?
Вот пример работы модуля модального окна:
Модуль:
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
которая тоже является модальным окном и не наследуется ни от кого, весь её код для работы грида прописан в ней же.