2012-09-14 15 views
6

Necesito agregar un elemento de menú recién creado en el tiempo de ejecución; por lo que mi código actualmente se ve así:ExtJS: agregar nuevo elemento de menú a instancia de menú en tiempo de ejecución

var myMenu = myCmp.query('mymenu')[0]; // retrieve my only Menu object 
var menuItem = Ext.create('Ext.menu.Item', { 
    itemId: 'myItemId', text: 'textGoesHere' 
}); 
myMenu.add(menuItem); 

estoy usando el add method para agregar el elemento; pero no sucede nada con los elementos del menú, aunque en tiempo de ejecución. Aunque la depuración muestra que el nuevo elemento se ha agregado realmente a la configuración items de la instancia del Menú.

Sin embargo, funciona el remove method, en tiempo de ejecución.

Pregunta: ¿Cómo hacer que MenuItem recién agregado se muestre en el tiempo de ejecución? ¿Qué me estoy perdiendo?

ACTUALIZACIÓN: el código anterior funciona; Tuve una instrucción de conmutación defectuosa que estaba causando otra pasada a través de la lógica, eliminando el último elemento de menú creado.

+0

¿Has intentado aplicar solo una configuración? Tal vez hay un error? Básicamente, esto debería funcionar sin necesidad de llamadas adicionales. – sra

+0

@sra Estoy de acuerdo contigo en que debería funcionar de la caja. ¿A qué te refieres con "* aplicar solo una configuración *"? Gracias. –

+0

Publiqué un ejemplo que funciona. Avíseme si necesita información adicional/ayuda – sra

Respuesta

5

comentario de ascenso de

El OP escribió

Aceptar que seguir la expedición hacia abajo; Tuve una instrucción de conmutación defectuosa que era que causaba otra pasada a través de la lógica, eliminando el último elemento de menú creado. De todos modos, marcaré su respuesta como correcta ya que también funciona (pasando el config obj).


Este ejemplo funciona:

var menu = Ext.create('Ext.menu.Menu', { 
    width: 100, 
    height: 100, 
    floating: false, // usually you want this set to True (default) 
    renderTo: Ext.getBody(), // usually rendered by it's containing component 
    items: [{ 
     text: 'icon item', 
     iconCls: 'add16' 
    },{ 
     text: 'text item' 
    },{ 
     text: 'plain item', 
     plain: true 
    }] 
}); 

menu.add({text:'test'}); 

no estoy muy seguro, pero de acuerdo a la API El menú tiene panel como el tipo por defecto cuando se mira a la menu pero parece ser menuitem acuerdo al menuitem API
Esto podría ser un poco confuso.

+0

OK Rastreo el problema; Tuve una instrucción 'switch' defectuosa que estaba causando otra pasada a través de la lógica, eliminando el último elemento de menú creado. De todos modos, marcaré su respuesta como correcta, ya que también funciona (pasando el config obj). –

+1

@JosvicZammit Mientras pueda ayudar y funciona ahora;) – sra

+0

@sra ¿Podría actualizar la respuesta para decir en la parte superior que la respuesta del OP * funciona * como está? No leí los comentarios la primera vez que vine aquí y me lancé en una búsqueda inútil tratando de forzar la renderización ansiosa en un elemento de menú agregado como un objeto de configuración. Para aclarar, el enfoque del OP * does * work, exactamente como está. –

Cuestiones relacionadas