javascript - Combobox EXTJS no selecciona por valorField después de expandir
filter store extjs (5)
En primer lugar, el cuadro combinado de Ext JS debe aplicar automáticamente el valor y mostrarse cuando se selecciona un elemento, salvo que haya asignado una tienda y le haya dicho a Ext que el campo requiere un valor.
El valor que parece estar solicitando (CompteurCommunes) no aparece en las definiciones de sus lectores, por lo que sería parte de los registros en el almacén de datos.
¿Cuál es la razón subyacente de por qué está tratando de establecer este valor para el ComboBox?
He escrito un código que funciona bastante bien, pero tengo un error extraño. He aquí un ejemplo ...
POR FAVOR, Mire MI COMBOBOX BUG VIDEO
Como dije, esto funciona bien cada vez que se cambian los incendios, se selecciona el índice correcto y se muestra displayField pero, cada vez que escribo algo de texto en el cuadro combinado, más adelante, cuando se activa el "intercambio de datos", no muestra displayField. En cambio, muestra el valor del método setValue que lanzo.
Lo extraño es que si nunca escribo texto y cambio la selección con el mouse, no hay errores. Finalmente, esto aparece solo cuando escribo texto en el cuadro combinado.
¿Alguien ha oído hablar de este error, tiene una solución o algún consejo sabio?
El código !
Dos almacenes de datos :
ficheDataStore = new Ext.data.Store({
id: ''ficheDataStore'',
autoLoad: true,
proxy: new Ext.data.HttpProxy({
url: ''ficheDetail.aspx'', // File to connect to
method: ''GET''
}),
baseParams: { clientId: clientId, Type: ''Fiche'' }, // this parameter asks for listing
reader: new Ext.data.JsonReader({ // we tell the datastore where to get his data from
root: ''results''
}, [
{ name: ''GUID'', type: ''string'', mapping: ''GUID'' },
{ name: ''TagClient'', type: ''string'', mapping: ''TagClient'' },
{ name: ''Nom'', type: ''string'', mapping: ''Nom'' },
{ name: ''Compteur'', type: ''string'', mapping: ''CompteurCommunes'' },
{ name: ''CompteurCommunesFacturation'', type: ''string'', mapping: ''CompteurCommunesFacturation'' },
{ name: ''AdresseFacturation'', type: ''string'', mapping: ''AdresseFacturation'' },
{ name: ''Codes'', type: ''string'', mapping: ''Codes'' },
{ name: ''Observations'', type: ''string'', mapping: ''Observations'' },
{ name: ''Adresse'', type: ''string'', mapping: ''Adresse'' }
])
});
communesDataStore = new Ext.data.Store({
autoLoad: true,
proxy: new Ext.data.HttpProxy({ url: ''ficheDetail.aspx?Type=Communes'' }),
reader: new Ext.data.JsonReader({ root: ''results'' }, [{ name: ''Compteur'' }, { name: ''Localisation''}])
});
¿Quién devuelve algo como esto por primera vez?
{results:[{"Nom":"cercle interieur"},{"Observations":""},{"Codes":" "},{"Adresse":"dd"},{"CompteurCommunes"
:"1"},{"TagClient":"3-56"},{"GUID":"443609c6-d064-4676-a492-7baa7b4288d1"},{"AdresseFacturation":""}
,{"CompteurCommunesFacturation":"1"}]}
Para despues :
{"results":[{ "Compteur" : "1","Localisation" : "6200 ST ISIDORE"},{ "Compteur" : "2","Localisation"
: "21340 CHANGE"},{ "Compteur" : "3","Localisation" : "1200 ELOISE"},{ "Compteur" : "4","Localisation"
: "1200 ST GERMAIN SUR RHONE"},{ "Compteur" : "5","Localisation" : "75000 PARIS"},{ "Compteur" : "6"
,"Localisation" : "75001 PARIS 1ER ARRONDISSEMENT"}]}
un Combobox
:
var comb = new Ext.form.ComboBox(
{
store: communesDataStore,
fieldLabel: ''Code postal'',
// hiddenName: ''Compteur'',
name: ''CompteurCommune'',
id: ''CompteurCommunes'',
width: 300,
typeAhead: true,
mode: ''local'',
minChars: 0,
selecOnFocus: true,
forceSelection: true,
valueField: ''Compteur'',
displayField: ''Localisation'',
autocomplete: true,
emptyText: ''Selectionnez un code postal'',
triggerAction: ''all'',
value: ''''
});
en un evento de datachanged
, establecí el nuevo valor de Combobox
"CompteurCommunes":
ficheDataStore.addListener(''datachanged'', handleDatachangedEvent);
function handleDatachangedEvent()
{
try {
comb.setValue(ficheDataStore.getAt(4).data.Compteur);
}
catch (err) { }
}
Probablemente se deba a que al escribir datos aleatorios en el combo, es posible que no ubique el valor fieldValue correcto cada vez. Luego se atasca en el último valor no existente.
Intente configurar ComboBox a cualquier valor existente (en el almacén de datos del combo) antes de hacer el nuevo setValue () en su controlador de eventos con cambio de datos. O puede intentar usar el método clearValue () para restablecer el valueField anterior (indefinido).
También existe el método initList () para restablecer el combo al estado inicial.
EDITAR: Después de algunas pruebas, encontré que: combo.store.clearFilter (); debe usarse antes de setValue en el controlador de eventos externo.
Puede echar un vistazo a los parámetros hiddenName y hiddenId de Ext.form.ComboBox. Si establece el valor del campo de formulario oculto vinculado con el cuadro combinado, el cuadro combinado mostraría la etiqueta de ese valor en lugar del valor mismo.
Esto es útil cuando necesita establecer el valor al final del servidor y dirigir al usuario a la página.
Otro método útil es selectByValue. Este método seleccionaría el elemento que tiene el valor igual al argumento pasado.
En su dataChangedListener en lugar de establecer el valor de combobox, debe establecer el valor del campo de formulario oculto asociado con ComboBox. Además, después de establecer el valor del campo oculto, es posible que deba activar el método selectByValue.
Puede consultar la documentación de la API ExtJS para obtener más información.
function formatComboBox(value, metaData, record, rowIndex, colIndex, store) {
myStore = Ext.getCmp(''myComboBox'');
myStore.clearFilter();
var idx = myStore.find(''value'',value);
return (idx != ''-1'') ? myStore.getAt(idx).data.label : value;
}
En caso de que alguien, como yo, llegue aquí a través de google porque es el más parecido a su problema de ComboBox ft. SetValue ():
Después de una hora de entrar y salir de las partes internas de Ext, descubrí que necesitaba establecer lazyInit: false para los cuadros combinados. De forma predeterminada, es verdadero y ser cierto puede causar un comportamiento no lógico si no lo sabe. ¿Y por qué lo harías? Cualquier otra cosa parece no ser floja por defecto.