javascript - realtime - Polímero: firebase DB no se actualiza con firebase-element
leer datos de firebase javascript (1)
Estoy tratando de configurar una conexión Firebase con Polymer 1.0:
<link rel="import" href="/bower/firebase-element/firebase-document.html">
...
<firebase-document id=''fstats''
location="https://polymer-redux.firebaseio.com/stats"
log="true"
data="{{stats}}"></firebase-document>
...
this.properties = {
stats: {
type: Object,
observer: ''_handleFirebaseStats'',
notify: true
}
...
_handleFirebaseStats(stats) {
...
}
Así es como se ve mi firebase db:
{
...
stats: { count: 0 }
}
Ahora, dentro de _handleFirebaseStats
, recibo { count: 0 }
, esa parte funciona muy bien. Pero también me gustaría guardar los datos en Firebase. He intentado:
this.$.fstats.set({count: 2});
this.$.fstats.set({stats: {count: 2}});
this.stats.count = 2;
// etc
De todos modos, todo lo que intento en mi aplicación de polímero, FireBase nunca se actualiza. ¿Alguna sugerencia sobre cómo actualizar Firebase?
Según mi suposición inicial (que era completamente incorrecta) , pensé que el comportamiento tenía algo que ver con el elemento firebase-document
, de hecho, el comportamiento está bien definido dentro del sistema Polymer''s Data Binding .
Solución 1: Reemplazar toda la propiedad.
this.stats = {count: 2};
Solución 2: informe al sistema que se ha actualizado una vinculación de ruta .
this.stats.count = 2;
this.notifyPath(''stats.count'', this.stats.count);
Solución 3: Permita que el Polímero maneje las cosas vinculantes de la ruta para usted.
this.set(''stats.count'', 2);
Directamente de los documentos :
Este sistema "simplemente funciona" en la medida en que los cambios en las sub-propiedades de los objetos ocurran como resultado de estar vinculado a una propiedad de elemento personalizado notificante que haya cambiado. Sin embargo, a veces el código imperativo necesita cambiar las subpropiedades de un objeto directamente. Como evitamos los mecanismos de observación más sofisticados como Object.observe o dirty-checking para lograr el mejor rendimiento en el inicio y en el tiempo de ejecución multiplataforma para los casos de uso más comunes, cambiar las subpropiedades de un objeto directamente requiere la cooperación del usuario.
Específicamente, Polymer proporciona dos métodos que permiten que dichos cambios sean notificados al sistema: notifyPath (ruta, valor) y set (ruta, valor), donde ruta es una cadena que identifica la ruta (relativa al elemento host).
También hay un Polycast donde Rob Dodson explica esto con gran detalle.