Pregunta ¿Cómo conseguir el padre de un menú?


Estoy tratando de obtener el componente en el que un menú está vinculado. Echar un vistazo:

    Ext.create('Ext.Button', {
    id: 'MyButton',
    text: 'Click me',
    renderTo: Ext.getBody(),
    menuAlign: 'tl-bl',
    menu: {
        itemId: 'MyMenu',        
        forceLayout: true,
        items:
        [
            {
                text  : 'Option 1',
                itemId: 'MyItemMenu1'
            }, {
                text  : 'Option 2',
                itemId: 'MyItemMenu2'
            }, {
                text   : 'Get the parent!',
                itemId : 'MyItemMenu3',
                handler: function(){

                    // Get the item menu.
                    var MyItemMenu3 = this; 
                    alert(MyItemMenu3.getItemId()); 

                    // Get the menu.
                    var MyMenu = MyItemMenu3.ownerCt; 
                    alert(MyMenu.getItemId());

                    // Try to get the button.
                    var MyButton = MyMenu.ownerCt; 
                    alert(MyButton);                    

                    // Returns:                    
                    // 'MyItemMenu3'
                    // 'MyMenu'
                    // undefined                 
                }
            }
        ]
    }
});

Ejemplo en línea: http://jsfiddle.net/RobertoSchuster/mGLVF/

¿Alguna idea?


5
2017-08-01 21:01


origen


Respuestas:


Estoy aprendiendo EXT yo mismo, así que no estoy muy seguro de lo que está pasando pero creo que pude hacerlo de esta manera: console.log(MyMenu.floatParent.id);


6
2017-08-03 15:14



En nuestro proyecto ExtJS 4, eventualmente parcheamos el up() funcionar en AbstractComponent

Ext.AbstractComponent.override({
    up: function(selector) {
        var result = this.ownerCt||this.floatParent;
        if (selector) {
            for (; result; result = result.ownerCt||result.floatParent) {
                if (Ext.ComponentQuery.is(result, selector)) {
                    return result;
                }
            }
        }
        return result;
    }
});

Esto hace up() sube por el ownerCt cadena, pero si ownerCt no está definido, parece floatParent.

Ahora puedes llamar cmp.up('some-selector'); incluso si es un menú o un elemento de menú.


3
2018-04-19 19:39



Prueba esto:

Ext.getCmp('My-Button').menu.refOwner

1
2017-08-03 02:20



var MyButton = MyItemMenu3.up('button');

o para ExtJS3:

var MyButton = MyItemMenu3.findParentByType('button');

1
2017-08-03 05:07



En la versión más reciente de ExtJS al menos (4.2), cada Ext. Menu. Artículo tiene un parentMenu Propiedad que puede acceder al menú padre. Puede subclasificar esto para elementos de menú personalizados.


0
2018-02-18 15:59