Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Ext.Action && Ext.Toolbar && Ext.menu.Menu (https://javascript.ru/forum/extjs/28747-ext-action-ext-toolbar-ext-menu-menu.html)

Ex_Soft 01.06.2012 11:23

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 иконка и тест.

Ex_Soft 01.06.2012 13:32

Не придумалось ничего умнее:
...
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)],
...
    });

nekto_O 02.06.2012 12:17

А почему бы просто не создать новый объект, скопировав в него нужные свойства?
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()
 });
...

Ex_Soft 02.06.2012 13:04

/me думает: тоже вариант... THNX

Ex_Soft 03.06.2012 08:25

Не - не вариант. В этом случае
actions["action1"].setDisabled(true);

из-за чего, собственно говоря и сыр-бор, ессесно на рожденную таким макаром кнопку воздействия не имеет...

nekto_O 03.06.2012 10:45

Цитата:

Сообщение от Ex_Soft
из-за чего, собственно говоря и сыр-бор, ессесно на рожденную таким макаром кнопку воздействия не имеет...

А как вы хотели? это другой экшн.
Может быть я не так тонко понимаю что вы хотите сделать, но все же зачем создавать класс ради этого, почему нельзя "на лету" задать свойства?

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()
 });

Ex_Soft 05.06.2012 10:48

Цитата:

Сообщение от nekto_O (Сообщение 178426)
но все же зачем создавать класс ради этого, почему нельзя "на лету" задать свойства?

/me думает: в принципе - можно и на лету...

Nikolay.e.v 23.01.2013 21:51

В объекте actions["action1"] есть атрибут items. В этом массиве лежат непосредственно все кнопки, которые относятся к данному объекту actions["action1"]. Т.е. вбацаете экшен в тулбар и два контекстных меню, значит будет три элемента.

Вот в них и надо менять свойства.
При событии beforerender просмотреть на ownerCt. Если это менюха, то вперед.

Завтра выложу код.
А вообще планирую оформить в удобоваримом виде.


Часовой пояс GMT +3, время: 21:48.