Добрый день.
Возникла потребность реализовать кнопку, аналогичную кнопке со стадиями в разделе Обращения:
Никак не могу понять, как задать значения в списке, которые будут отображаться при нажатии на кнопку.
Коллеги, был ли у кого-то опыт реализации данной задачи?
Пробовала делать следующим образом: в секции diff прописала
{ "operation": "insert", "parentName": "ActionButtonsContainer", "propertyName": "items", "name": "TestButton1", "values": { "itemType": this.Terrasoft.ViewItemType.BUTTON, "style": this.Terrasoft.controls.ButtonEnums.style.GREEN, "caption": "Test!!!!!!", "click": {"bindTo": "onResolvedButtonTest"}, "classes": { "textClass": ["actions-button-margin-right"], "wrapperClass": ["actions-button-margin-right"] }, "menu": { "items": {"bindTo": "ButtonMenu"} } } }
В секции attributes прописала:
"ButtonMenu": { dataValueType: this.Terrasoft.DataValueType.COLLECTION }
Но я не совсем понимаю как мне наполнить коллекцию ButtonMenu значениями, которые должны отображаться в выпадающем списке на кнопке?
Нравится
Вообще добавление подменю выглядит так:
var MenueItems = this.Ext.create("Terrasoft.BaseViewModelCollection"); this.getButtonMenuItem({ "Click": { "bindTo": "ClickEvent" }, "Tag": tag, "Caption": caption, "Enabled": true, "Visible": true }) this.set("ButtonMenu", MenueItems);
В моём случае я заполнял выпадающий список значениями справочника по этому добавил функцию initMenueItems в init страницы
initMenueItems:function(){ var self = this; var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "SchemaName" }); esq.addColumn("Name", "Name"); esq.addColumn("Id", "Id"); esq.filters.add("Type", this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "Type", "{TypeId}")); esq.getEntityCollection(function (response) { if (!response.success) return; var data = response.collection; var MenueItems = self.Ext.create("Terrasoft.BaseViewModelCollection"); data.collection.items.forEach(function (item) { MenueItems.addItem(self.getButtonMenuItem({ "Click": { "bindTo": "ClickEvent" }, "Tag": item.values.Id, "Caption": item.values.Name, "Enabled": true, "Visible": true })); }); self.set("ButtonMenu", MenueItems); }); }
Если вопрос еще актуален, статично можно добавить так:
{
"operation": "insert",
"parentName": "OpportunityPageOfferTabContentGroup",
"propertyName": "items",
"name": "getOfferEngButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
//"classes": {textClass: "actions-button-margin-right"},
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"caption": {bindTo: "Resources.Strings.UsrGetOfferButtonCaption"},
"menu": {
"items": [{
"caption": {"bindTo": "Resources.Strings.UsrGetOfferEngButtonCaption"},
"click": {"bindTo": "getOfferEng"}
}, {
"caption": {"bindTo": "Resources.Strings.UsrGetOfferRusButtonCaption"},
"click": {"bindTo": "getOfferRus"}
}]
}
}
},
Спасибо. Попробовала сделать обоими способами, все получилось!
Всё можно сделать еще прозаичнее, к обычной кнопке в diff добавляем свойство
"menu": { "items": {"bindTo": "ButtonMenuItems"} },
где ButtonMenuItems это атрибут
attributes: { "ButtonMenuItems": { dataValueType: this.Terrasoft.DataValueType.COLLECTION } },
куда в свою очередь, необходимо добавлять через метод addItem, элементы вот как-то так
var collection = this.get("ButtonMenuItems"); var menuItem = this.Ext.create("Terrasoft.BaseViewModel", { values: { "Caption": "Заголовок пункта меню", "Click": {bindTo: "actionMethod"} } }); collection.addItem(menuItem);