Добрый день.
Возникла потребность реализовать кнопку, аналогичную кнопке со стадиями в разделе Обращения:
![]()
Никак не могу понять, как задать значения в списке, которые будут отображаться при нажатии на кнопку.
Коллеги, был ли у кого-то опыт реализации данной задачи?
Пробовала делать следующим образом: в секции 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);