Escribí una aplicación Ext JS 7.0 con una cuadrícula que usa Ext Direct para conectarse a una base de datos SQL basada en el ejemplo de Sencha ( https://docs.sencha.com/extjs/7.0.0/guides/backend_connectors/direct/mysql_php .html ). Esto funciona bien.
La aplicación también tiene algunas vistas con algunos campos de texto. Su contenido también se almacena en la base de datos, pero en una tabla diferente, así que agregué las funciones necesarias a QueryDatabase.php y extendí config.php. Ahora, escribir en la base de datos funciona simplemente llamando a la función (php) correspondiente en el controlador, por ejemplo, QueryDatabase.updateSettings(JSONstring); .
También quiero llenar inicialmente los campos de texto con los datos almacenados en la base de datos y aquí es donde me meto en problemas.
Si llamo a la función de lectura adecuada y la asigno a una variable, por ejemplo, settingsJSON = QueryDatabase.getSettings(); , settingsJSON permanece sin definir, aunque puedo ver en el navegador que router.php devuelve el resultado correcto (como "{\"Setting1\":\"a value\",\"Setting2\":\"another value\"}" ).
Como la solicitud es asíncrona, intenté usar una función de devolución de llamada (según https://docs.sencha.com/extjs/7.0.0/classic/Ext.direct.RemotingProvider.html#cfg-actions ):
onSettingsRefreshClick: function() { console.log('Hello world!'); QueryDatabase.getSettings(function(result, e, success, options) { console.log('Hello again!'); var t, action, method; t = e.getTransaction(); action = t.action; method = t.method; if (e.status) { console.log(Ext.encode(result)); } }) }Pero esto tampoco funciona. router.php aún entrega el resultado correcto, pero no se muestra en la consola. Obviamente, toda la función de devolución de llamada no se ejecuta como '¡Hola de nuevo!' tampoco aparece en la consola ('Hello world!' sí). Entonces, ¿cómo asigno la cadena JSON devuelta por router.php a una variable?