Ext.Action && Ext.Toolbar && Ext.menu.Menu
Хочу заюзать Ext.Action в Ext.Toolbar и Ext.menu.Menu одновременно. Но хочется чтобы Ext.Action в Ext.Toolbar был только иконкой, а в Ext.menu.Menu иконка и текст. Реально ли сие? К примеру:
Ext.onReady(function() { Ext.QuickTips.init(); var actions = []; actions["action1"] = new Ext.Action({ text: "TestAction1", iconCls: "iconTools", handler: doAction }); actions["action2"] = new Ext.Action({ text: "TestAction2", handler: doAction }); Ext.create("Ext.toolbar.Toolbar", { items: [ actions["action1"], { text: "Menu# 1", menu: [ actions["action1"], actions["action2"] ] }], renderTo: Ext.getBody() }); }); function doAction(menuItem, e) { if(window.console && console.log) console.log("doAction(%o)", arguments); } Кнопка в Ext.Toolbar иконка и тест. |
Не придумалось ничего умнее:
... Ext.define("ButtonWOText",{ extend: "Ext.button.Button", initComponent: function() { this.callParent(arguments); this.setTooltip(this.getText()); this.setText(""); } }); ... Ext.create("Ext.toolbar.Toolbar", { ... items: [new ButtonWOText(smthAction)], ... }); |
А почему бы просто не создать новый объект, скопировав в него нужные свойства?
var duplicate = Ext.copyTo({}, actions["action1"].initialConfig, 'iconCls'); а затем просто использовать его в тулбаре: ... Ext.create("Ext.toolbar.Toolbar", { items: [duplicate, { text: "Menu# 1", menu: [ actions["action1"], actions["action2"] ] }], renderTo: Ext.getBody() }); ... |
/me думает: тоже вариант... THNX
|
Не - не вариант. В этом случае
actions["action1"].setDisabled(true); из-за чего, собственно говоря и сыр-бор, ессесно на рожденную таким макаром кнопку воздействия не имеет... |
Цитата:
Может быть я не так тонко понимаю что вы хотите сделать, но все же зачем создавать класс ради этого, почему нельзя "на лету" задать свойства? Ext.create("Ext.toolbar.Toolbar", { items: [Ext.apply(Ext.create('Ext.button.Button', actions["action1"]), { text: '', tooltip: actions["action1"].getText() }), { text: "Menu# 1", menu: [ actions["action1"], actions["action2"] ] }], renderTo: Ext.getBody() }); |
Цитата:
|
В объекте actions["action1"] есть атрибут items. В этом массиве лежат непосредственно все кнопки, которые относятся к данному объекту actions["action1"]. Т.е. вбацаете экшен в тулбар и два контекстных меню, значит будет три элемента.
Вот в них и надо менять свойства. При событии beforerender просмотреть на ownerCt. Если это менюха, то вперед. Завтра выложу код. А вообще планирую оформить в удобоваримом виде. |
Часовой пояс GMT +3, время: 21:48. |