2010-11-18 39 views
13

Me gustaría saber cómo actualizar o volver a cargar los valores de lista de un ComboBox de ExtJs. Por ejemplo, tengo algunas casillas de verificación. Estas casillas de verificación determinan qué valores debe tener el ComboBox. Entonces, después de seleccionar algunos de ellos, hago clic en la lista desplegable (cuadro combinado) para ver los valores.Actualizar o recargar tienda de ExtJs ComboBox

En resumen, ¿cómo puedo cambiar los valores (almacenamiento) de un ComboBox que ya tiene.

espero que alguien me puede ayudar

Gracias

+0

Hizo alguna respuesta resuelve tu problema?Acepte la mejor respuesta haciendo clic en la marca de verificación, por favor. – Roberto

Respuesta

0

En un detector de eventos en las casillas de verificación, obtener una referencia a la tienda que su ComboBox está leyendo. Luego invoque sus funciones de agregar o eliminar para actualizar los datos en la tienda según qué casilla de verificación sea checked Una vez que las actualizaciones se completen, invoque un doLayout() en el componente ComboBox, debería volver a renderizarse en función del estado actual de la tienda.

Aunque creo que hay una forma de que se actualice automáticamente cada vez que se actualice la tienda, no lo he usado todavía.

+0

¿Crees que es posible actualizar el cuadro combinado dentro de uno de sus eventos? Por ejemplo, quiero hacer clic en el cuadro combinado (la flecha hacia abajo), luego, antes de que se muestre, una función obtiene los valores en función de las casillas de verificación seleccionadas. – user512514

+0

En realidad, tengo un gridPanel con casillas de verificación. Estoy obteniendo algunos valores de los registros obtenidos por getSelections. Me gustaría encontrar una forma de hacer este proceso una vez en lugar de hacerlo cada vez que selecciono una fila (o seleccionar la casilla de verificación). Es por eso que tuve la idea de hacerlo haciendo clic en el ComboBox. – user512514

+0

Definitivamente es posible hacerlo dentro de los eventos internos del cuadro combinado, extender el objeto ComboBox y agregar su propio js antes de llamar al controlador de eventos del padre. En cuanto a gridPanel, es un poco difícil conceptualizar sin el código. –

6

Se va un poco algo como esto

{ 
    xtype: 'checkbox', 
    //configs 
    listeners : { 
    checked : function (checkbox, checkedBool) { 
     var yourCombo = Ext.getCmp(yourComboID); 

     //I'm not sure what params you will need to reload the comboBox from your 
     // service but hopfully this will give the jist of things. . . 

     yourCombo.store.reload(
        { 
        params: 
         {yourParam : checkedBool}, 
         {yourRowID : rowID} 
        }); 
     } 
} 
14

He estado usando esta función no documentada API ExtJs para cambiar el almacén en tiempo de ejecución:

mycombobox.bindStore(newStore); 

según lo declarado por el equipo de apoyo en http://www.sencha.com/forum/showthread.php?40749-Change-Combobox-store-data-update .

Editar: Si yo quiero poner los nuevos datos cuando la tienda está poblado, que hacer algo como esto

storeMyStore = new Ext.data.Store({ 
    ... 
    listeners: { 
     load: function(this, records, options) { 
      cbMyCombo.bindStore(storeMyStore); 
     } 
    } 
}); 
+0

En realidad, no es "indocumentado", http://docs.sencha.com/extjs/4.2.5/#!/api/Ext.form.field.ComboBox-method-bindStore pero me sirvió de algo, ¡Gracias! –

+0

Oh, bueno, no fue documentado en 2011 :) – Roberto

2

Aquí haciendo un cuadro combinado que se actualiza después de que se realiza una selección en otro ComboBox. Básicamente, el usuario final puede usar los dos cuadros combinados para seleccionar una categoría principal y una subcategoría, que se basa en la selección realizada en el primer cuadro combinado.

Esta es la primera tienda para comboBox:

Ext.define("StoreSubject", { 
extend: "Ext.data.Model", 
fields: [ 
{ 
    name: 'i_Id' 
}, 
{ 
    name: 's_Value' 
} 
] 
}); 

var StoreSubject = Ext.create('Ext.data.JsonStore', { 
model: 'StoreSubject', 
proxy: { 

    type: 'ajax', 
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=15', 
    reader: { 
     type: 'json' 
    } 
} 
}); 
StoreSubject.load(); 

Ésta es la segunda tienda para comboBox:

Ext.define("StoreLanguageGroup", { 
extend: "Ext.data.Model", 
fields: [ 
{ 
    name: 'i_Id' 
}, 
{ 
    name: 's_Value' 
} 
] 
}); 
var StoreLanguageGroup = Ext.create('Ext.data.JsonStore', { 
model: 'StoreLanguageGroup', 
proxy: { 

    type: 'ajax', 
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=16', 
    reader: { 
     type: 'json' 
    } 
} 
}); 

Mi código para Comobox es se parece a esto ..

Primera ComboBox :

var cmbSubjectName = Ext.create('Ext.form.field.ComboBox', { 
id: 'cmbSubjectName', 
fieldLabel: '<b>Subject</b>', 
name: 'cmbSubjectName', 
valueField: 's_Value', 
displayField: 's_Value', 
allowBlank: false, 
anchor: '80%', 
labelWidth: 150, 
emptyText: '[--Choose--]', 
minChars: 0, 
store: StoreSubject, 
queryMode: 'local', 
typeAhead: true, 
listeners: { 
    'select': { 
     fn: function (combo, value) { 
      var strSubjectName = Ext.getCmp('cmbSubjectName').getValue(); 
      Ext.getCmp('cmbLanguageType').clearValue(); 
      Ext.getCmp('cmbLanguageType').getStore().load({ 
       params: { 
        SubjectName: strSubjectName 
       } 
      }); 
     } 
    } 

}, 
}); 

Este código se utiliza para llamar y anular la tienda combox (Impotente de lo contrario, se mantendrá en la carga)

Ext.override(Ext.LoadMask, { 
onHide: function() { 
    this.callParent(); 
} 
}); 

// -------------------- -------

segundo cuadro combinado:

var cmbLanguageType = Ext.create('Ext.form.field.ComboBox', { 
id: 'cmbLanguageType', 
fieldLabel: '<b>Language</b>', 
multipleSelect: false, 
name: 'cmbLanguageType', 
valueField: 's_Value', 
displayField: 's_Value', 
allowBlank: false, 
anchor: '80%', 
labelWidth: 150, 
emptyText: '[--Choose--]', 
minChars: 0, 
store: StoreLanguageGroup, 
queryMode: 'local', 
typeAhead: true, 
}); 

Esperamos que esto le ayuda .. Por favor, evalúe y mi respuesta

+0

¡Bienvenido a [so]! Por favor tome una [gira]. – Unihedron

Cuestiones relacionadas