Технические вопросы
7.x

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

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

Нравится

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

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

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

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


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

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

Модуль:
[javascript]
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;
});
[/javascript]

Страница модального окна:
[javascript]
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 }
}
}
]
};
});
[/javascript]

Вызов из карточки:
[javascript]
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*/
};
});
[/javascript]

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

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

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

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

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

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


Илья Вы немного не правильно поняли, я хочу в модальном окне отобразить реестр без возможности редактирования, сделал через esq, а результат пытаюсь записать в gridata но возникает ошибка "message: Cannot read property 'each' of null "
код js [javascript]
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 }
}
}
]
};
});
[/javascript]

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

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

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