Добрый день!

 

Есть задача по реализации кнопки-меню с динамическим списком. Нужно создать кнопку по типу Actions или Print.

Я создала метод, который выбирает из списка нужные пункты и добавляет их как пункты меню:

attributes: {
	"ButtonMenu": {dataValueType: this.Terrasoft.DataValueType.COLLECTION},
},
methods: {
	init: function() {
		this.callParent(arguments);
		this.initMenuItems();
	},
initMenuItems:function(){
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "MyList"
	});
	esq.addColumn("Caption");
	esq.filters.add("Section", this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "Section.Id", "f7856ad3-fa4c-4106-9a6c-d8dcd87331eb"));
	esq.execute(function (response) {
	        if (!response.success) {
		       return;
	        }
	        var actionMenuItems = Ext.create("Terrasoft.BaseViewModelCollection");
		response.collection.each(function(item) {
 
			var isVisible = this.getVisibility(item.get("Caption"));
			actionMenuItems.addItem(this.getButtonMenuItem({
				"Caption": item.get("Caption"),
				"Click": {bindTo: "callMyProcess"},
				"Enabled": isVisible
			}));
		},this);
		this.set("ButtonMenu", actionMenuItems);
	},this);			
}
},
		diff: /**SCHEMA_DIFF*/[
			{
                "operation": "insert",
                "parentName": "LeftContainer",
                "propertyName": "items",
                "name":"MenuButton",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "style": Terrasoft.controls.ButtonEnums.style.GREEN,
                    "caption": "Test",
                    "menu": {
                        "items": {"bindTo": "ButtonMenu"}
                    }
                }
            }
		]/**SCHEMA_DIFF*/

Когда я вызываю мой метод в методе init страницы раздела, то поставленная задача выполняется. НО портится стиль всех остальных кнопок списков, добавляя стрелку пролистывания как в большие, так и в маленькие списки:

Изображение удалено.Изображение удалено.

 

Если закоментировать вызов моего метода в методе init, то стрелка в списках пропадает и они отображаются корректно (но в этом случае моя кнопка никогда не инициализирует список).

 

Что сделано не правильно?

Подскажите, пожалуйста, как решить данную задачу.

 

Заранее спасибо.

Нравится

1 комментарий

Здравствуйте!

 

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

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

1) Сначала в контрол типа LookUp добавляем кнопку (обычный Button) как дочерний элемент
2) Далее в нужном месте добавляем в её меню элементы (на примере молнии ConfigurationItemToolButton)

var menuItem = CreateMenuItem(configurationItemName, configurationItemId.ToString(), "ItemClick_Yw", Page.ConfigurationItemToolButton.ClientID);
Page.ConfigurationItemToolButton.Menu.AddCaptionItem(menuItem);
Page.AddScript(string.Format("{0}.init_ev()", menuItem.ClientID));

ConfigurationItemToolButton - сама кнопка SmartTag
configurationItemName - будет Caption нашего пункта, например, название элемента
configurationItemId - GUID выбираемого элемета, который присвоим нашему LookUp-полю в случае его выбора, кладём в Tag пункта меню

3) На событии Init создаём подписку по нажатию пункта меню этой кнопки, где сами определяем, какая должна быть логика, логично, что должна быть установка значения в Lookup , но это надо написать самим, так как логика может быть любой:

Page.ConfigurationItemToolButton.AjaxEvents.MenuItemClick.Event += delegate(object sender, Terrasoft.UI.WebControls.Controls.AjaxEventArgs e) {
string ConfigurationItemIdString = e.ExtraParameters[2].Value.ToString();
int LocUnderChar = ConfigurationItemIdString.LastIndexOf("_");
if (LocUnderChar > 0)
ConfigurationItemIdString = ConfigurationItemIdString.Remove(0,LocUnderChar+1);
var clickedMenuItemCode = new Guid(ConfigurationItemIdString);                        
Page.DataSource.ActiveRow.SetColumnValue("ConfigurationItemId", clickedMenuItemCode);
Page.DataSource.ActiveRow.LoadLookupDisplayValues("ConfigurationItem");
};

Тут e.ExtraParameters[2].Value передаётся не совсем GUID, поэтому пришлось немного обрезать.
Ниже код метода CreateMeniItem и CreateSeparatorMenuItem

protected virtual Terrasoft.UI.WebControls.Controls.MenuItem CreateMenuItem(string caption, string tag, string signalName, string targetControlID) {
                        var menuItem = new Terrasoft.UI.WebControls.Controls.MenuItem(caption);
menuItem.Tag = tag;
menuItem.AjaxEvents.Click.SignalName = signalName;
menuItem.Name = "menuItem_" + Guid.NewGuid().ToString("N");
menuItem.CreatedByAjax = true;
menuItem.AjaxEvents.Click.AjaxEventTargetControlID = targetControlID;
return menuItem;
                }

                protected virtual MenuSeparator CreateSeparatorMenuItem(string caption) {
                        return new MenuSeparator {
        Name = "menuItem_" + Guid.NewGuid().ToString("N"),
        Caption = caption,
        CreatedByAjax = true
};
}

Нравится

Поделиться

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