Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2012, 11:23
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

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 иконка и тест.
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2012, 13:32
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Не придумалось ничего умнее:
...
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)],
...
    });
__________________
"Helo, word!" - 17 errors 56 warnings

Последний раз редактировалось Ex_Soft, 01.06.2012 в 13:35.
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2012, 12:17
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

А почему бы просто не создать новый объект, скопировав в него нужные свойства?
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()
 });
...
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2012, 13:04
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

/me думает: тоже вариант... THNX
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2012, 08:25
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

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

из-за чего, собственно говоря и сыр-бор, ессесно на рожденную таким макаром кнопку воздействия не имеет...
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #6 (permalink)  
Старый 03.06.2012, 10:45
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от 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()
 });
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2012, 10:48
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Сообщение от nekto_O Посмотреть сообщение
но все же зачем создавать класс ради этого, почему нельзя "на лету" задать свойства?
/me думает: в принципе - можно и на лету...
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #8 (permalink)  
Старый 23.01.2013, 21:51
Новичок на форуме
Отправить личное сообщение для Nikolay.e.v Посмотреть профиль Найти все сообщения от Nikolay.e.v
 
Регистрация: 23.01.2013
Сообщений: 1

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

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск