В пользовательском разделе есть динамические страницы, и мне нужно сделать кнопку с действием, которое сохранит запись раздела, запретит её для редактирования, и отправит уведомление, чтобы управляющее лицо подтвердило действия на этой странице, допустим, покупку оборудования.
В мастере раздела нельзя создать кнопку, но я уверен, что это возможно в клиентском коде, так как на форуме многократно встречались ответы на подобные вопросы, но ссылки в них, увы, указывают на устаревшие адреса, которые перенаправляют на главную страницу академии террасофт.
Расположение кнопки не имеет большого значения, нужно только вызвать мой метод по нажатию.
Нравится
на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию
attributes: { "ButtonEnabled": { "dataValueType": Terrasoft.DataValueType.BOOLEAN, "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "value": false }
Вызов функции на кнопке
onButtonClick: function(){ this.SomeFunc();
Сама кнопка в DIFF
{ "operation": "insert", "name": "Button", "values": { "itemType": 5, "caption": { "bindTo": "Resources.Strings.ButtonCaption" }, "click": { "bindTo": "onButtonClick" }, "style": "blue", "enabled": { "bindTo": "ButtonEnabled" }, "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Tab72b43268TabLabelGridLayoutfb645753" } }, "parentName": "Tab72b43268TabLabelGridLayoutfb645753", "propertyName": "items", "index": 0 },
В LocalizableString
ButtonCaption - Текст на кнопке
Если расположение кнопки не имеет значения, то можно использовать меню в "Действиях"
getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": {"bindTo": "Resources.Strings.MyButtonCaption"}, "Click": {"bindTo": "onMyButtonClick"} })); return actionMenuItems; },
на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию
attributes: { "ButtonEnabled": { "dataValueType": Terrasoft.DataValueType.BOOLEAN, "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "value": false }
Вызов функции на кнопке
onButtonClick: function(){ this.SomeFunc();
Сама кнопка в DIFF
{ "operation": "insert", "name": "Button", "values": { "itemType": 5, "caption": { "bindTo": "Resources.Strings.ButtonCaption" }, "click": { "bindTo": "onButtonClick" }, "style": "blue", "enabled": { "bindTo": "ButtonEnabled" }, "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Tab72b43268TabLabelGridLayoutfb645753" } }, "parentName": "Tab72b43268TabLabelGridLayoutfb645753", "propertyName": "items", "index": 0 },
В LocalizableString
ButtonCaption - Текст на кнопке
Oleg,
Кнопка добавилась, и даже отображается в инспекторе, но при этом она абсолютно невидима. В enabled установлено true.
В вашем коде изменил только родительский контейнер и, соответственно, layoutName. У других элементов на странице тот же родитель
Oleg,
Спасибо большое, Олег. Хотел ответить "захардкодил", потом заметил, что захардкодил неправильно, но оставлю тут этот неправильный пример, на случай если кто столкнется в будущем.
{ "operation": "insert", "name": "Button", "values": { "itemType": 5, "caption": {// Правильно: "caption" :"Check out", "bindTo": "Check out" // неправильное использование bindTo }, "click": { "bindTo": "onButtonClick" }, "style": "blue", "enabled": true, "layout": { "colSpan": 8, "rowSpan": 1, "column": 16, "row": 6, "layoutName": "Tab84fbfd75TabLabelGridLayout489fb6f3" } }, "parentName": "Tab84fbfd75TabLabelGridLayout489fb6f3", "propertyName": "items", "index": 6 },