Добрый день.
Есть такой метод Terrasoft.showInputBox, который выводит всплывающее окно по центру экрана, в котором можно отобразить свои кастомные поля.
Как в такое окно добавить выпадающий список и наполнить его данными?
А также как расширить текстовое поле "Текст" на несколько строчек?
Вот наш код:
Terrasoft.showInputBox(
"Отправить СМС", function() {}, ["ok", "cancel"], null, {
caption: {
dataValueType: Terrasoft.DataValueType.ENUM,
caption: 'Шаблоны',
value: 'test',
isRequired: false
},
name : {
dataValueType: Terrasoft.DataValueType.TEXT,
caption: 'Текст',
value: '',
isRequired: true
}
},
{
defaultButton: 0
})
},
Нравится
Здравствуйте!
Заполнение выпадающего списка ранее обсуждалось в этой теме.
Для многострочности поля попробуйте добавить признак:
"contentType": Terrasoft.ContentType.LONG_TEXT
Спасибо за ответ.
Как я понял надо использовать list и prepareList.
Но я не понял откуда оно будет брать метод в bindTo (EntityVirtualList и getEntityItems).
Есть ли примеры реализации этих методов.
Также пробовал добавить "contentType": Terrasoft.ContentType.LONG_TEXT, не помогло.
Terrasoft.showInputBox( "Отправить СМС", function() {}, ["ok", "cancel"], null, { caption: { dataValueType: Terrasoft.DataValueType.ENUM, caption: 'Шаблоны', list: { bindTo: 'EntityVirtualList' }, prepareList: { bindTo: 'getEntityItems' }, isRequired: false }, name : { dataValueType: Terrasoft.DataValueType.TEXT, caption: 'Текст', value: 'test', "values": { "layout": { "rowSpan": 3 }, "contentType": this.Terrasoft.ContentType.LONG_TEXT }, isRequired: true } }, { defaultButton: 0 })
"Маланчак Василий Тарасович" написал:Но я не понял откуда оно будет брать метод в bindTo (EntityVirtualList и getEntityItems).
Добрый день Василий!!!
- EntityVirtualList описываете в Атрибутах формы как коллекция
- getEntityItems это метод получения и загрузки в список результатов какой-либо SQL выборки, т.е с помощью EntitySchemaQuery создаете запрос, выполняете его. Результат выполнения запроса описываю ниже:
documentIssuanceSelect.getEntityCollection(function(response) { if (response.success) { var responseItems = response.collection.getItems(); var columnList = {}; Terrasoft.each(responseItems, function(item) { columnList[item.get("Id")] = { value: item.get("Id"), displayValue: item.get("Contact") }; }); list.clear(); list.loadAll(columnList); } }, this);
в данном примере я как раз загружал список контактов в выпадающее меню.
Спасибо за ответ.
Не работает.
Для теста взял выборку с таблицы SysCulture чтобы не меня запрос.
Сделал так:
attributes: { EntityVirtualList: { type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, name: "EntityVirtualList", isCollection: true } }, ... SendSMS: function(){ Terrasoft.showInputBox( "Отправить СМС", function() {}, ["ok", "cancel"], null, { caption: { dataValueType: Terrasoft.DataValueType.ENUM, caption: 'Шаблоны', list: { bindTo: 'EntityVirtualList' }, prepareList: { bindTo: 'getEntityItems' }, isRequired: false }, name : { dataValueType: Terrasoft.DataValueType.TEXT, caption: 'Текст', value: 'test', "values": { "layout": { "column": 0, "row": 0, "colSpan": 24, "rowSpan": 2 }, "contentType": this.Terrasoft.ContentType.LONG_TEXT }, isRequired: true } }, { defaultButton: 0 }) }, getEntityItems: function() { var cultureSelect = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "SysCulture"}); cultureSelect.addColumn("Id"); cultureSelect.addColumn("Name"); cultureSelect.getEntityCollection(function(response) { var list = this.get("languageList"); if (response.success) { var responseItems = response.collection.getItems(); var columnList = {}; Terrasoft.each(responseItems, function(item) { columnList[item.get("Id")] = { //value: item.get("Id"), displayValue: item.get("Name") }; }); list.clear(); list.loadAll(columnList); } }, this); },
define("ContractPageV2", [], function() { return { entitySchemaName: "Contract", attributes: { ..... } }; });
вот пример где именно нужно описать EntityVirtualList как коллекция.
"EntityVirtualList": { "dataValueType": Terrasoft.DataValueType.COLLECTION },
"Маланчак Василий Тарасович" написал://value: item.get("Id"),
Василий здесь комментировать не нужно. Вы как потом узнаете Id выбранной записи? И как описать коллекцию, об этом написал выше. Далее уже берем Дебаггер и смотрим что у вас получается. Но скорее всего не получается из-за того, что Запросы у нас асинхронные, а страница к тому моменту, как исполнится запрос уже отрисуется и конечно в коллекции будет НУЛЛ. Коллекцию нужно формировать перед отрисовкой страницы. И тогда у вас все будет работать корректно.
Здравствуйте, контролл «MessageBox» слишком упрощен, и не подходит для того что Вы хотите реализовать. Он не работает в контексте вызывающей страницы и не использует её атрибуты.
Вам необходимо использовать модальное окно, которое под собой имеет полноценную схему страницы. С атрибутами, сообщениями, методами.
Для Вашей задачи подходит «ModalBox», примеры использования которого, в системе, это: «WelcomeScreen», «MapsModule», «SupplyPaymentProductDetailModalBox», «TagModuleSchema».
В качестве примера прикладываю исходный код тесового общения между страницей контакта, и простейшим модальным окном с одним единственным текстовым полем и кнопкой. Заполнив которое, по нажатию кнопки, значение из поля вернется в страницу контакта, где будет выведено через console.log.
Исходные коды:
modulmodalnogookna.txt
stranicamodalnogookna.txt
vyzovizkartochkikontakta.txt
В примере, страница модального окна это «Схема модели представления карточки», без указания родительской схемы.
Модуль модального окна это «Модуль», с одной единственной зависимостью на вышесозданную страницу.
Вызов из карточки контакта, это замещающая схема карточки контакта.
А уже с полноценной страницей, можете спокойно размещять там любые компоненты, и работать с ними так, как в обычных страницах. Включая размещение атрибута листа и заполнение его через prepareList.
Добрый день Максим!!!
да я модальными окнами пользуюсь, пусть немного не так но пользуюсь. Я описываю свои модальные окна по отдельности, View и ViewModel. Так нас учили еще когда была 7.3 версия. Так приучает к дисциплинированности. Ваш вариант очень интересен и удобен, но в данном варианте большую часть работы делает Генератор страницы.
но вот какой у меня возник вопрос. Если данный пример так прост и интересен, и можно с легкостью делать с меньшими затратами модальные окна. Вопрос зачем тогда в системе Появилась "Мини-карточка редактирования" и остались модальные окна? Может что-то должно было упраздниться? чтобы в голове осталось только Одна сущность, а не две. Я конечно понимаю, что мини-карточка редактирования обладает по умолчанию более богатым функционалом, нежеле чем модальное окно. Но еще раз повторюсь мне кажется с появлением новинки, модальное окно должно было остаться в прошлом.
разъясните данную ситуацию. Спасибо!!!
Спасибо за ответ.
Но есть некие проблемы с отображением полей на карточке.
Если ставить "parentName": "MyGridContainer" то не работает коректно.
Не отображается поле для ввода, и кнопка работает с "глюками"(нажимается не с первого раза).
Если же "parentName": "MyContainer" то элементы отображаются и работают, но нет возможности использовать свойства layout .
Скрин окна прилагаю.
Василий день добрый!!!
пожалуйста по приведенному примеру, что писал выше Максим, создайте пожалуйста свою Модальную страницу. После создания, если есть проблемы, пожалуйста Василий выложите во вложение все 3 файла, как в примере максима. И тогда можно будет предметно понимать в чем у вас возникла сложность. сейчас по одному скриншоту очень сложно ориентироваться. спасибо!!!
Добрый день
Делал полностью по примеру.
1. Создал Схему модели представления карточки (UsrMyModalPage), скопировал код из stranicamodalnogookna.txt
2. Создал Модуль(UsrMyModalModule), Скопировал в него текст из modulmodalnogookna.txt, добавил зависимость на UsrMyModalPage ( Custom ).
3. Заместил страницу контакта. Скопировал код из vyzovizkartochkikontakta.txt.
Своей логики пока не добавлял никакой
Не обратил внимание что генератор неадекватно себя ведет с грид контейнерами в модальном окне.
Используйте обычный контейнер, для Вашей задачи должно хватить, многострочный эдит сделать там можно.
Пример во вложении:
usrmymodalpage.txt
В случае если что-то нужно иначе спозиционировать, можно дописать и подключить к странице пользовательские CSS стили.
Добрый день! подскажите, у кого нибудь получилось? Я повторяю пример и появляется только чистый модалбокс. В консоли ошибка : Script error for "UsrMyModalPageStructure" :(
Надежда, обратите внимание, что это примеры для довольно старой версии 7.7, сейчас актуальна уже 7.17. Какой именно пример из переписки Вы использовали? Есть более подробная информация об ошибке, в отладчике выполнение не смотрели?