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, время: 00:54. |