2

Ich baute eine einfache Seite, die mehrere Registerkarten hat. Jede Registerkarte lädt einen Feed (Sammlung/Liste) von Artikeln aus Firebase und rendert Karten auf der Seite. Alles funktioniert wie ich wollte, bis ich versuchte, die besuchten Feeds in indexeddb mit app-indexeddb-mirror zu persistieren.app-indexeddb-mirror mit Polymerfire

Hier ist, was ich getan habe:

<dom-module id="my-view1"> 
<template> 
    <style include="shared-styles"> 
    </style> 

    <paper-tabs id="tabs" 
       attr-for-selected="value" 
       selected="{{selectedFeed}}" 
       scrollable> 
     <template is="dom-repeat" 
        items="[[feeds]]" 
        as="feed"> 
      <paper-tab value="[[feed.key]]">[[feed.name]]</paper-tab> 
     </template> 
    </paper-tabs> 

    <firebase-query id="[[selectedFeed]]_feed" 
        app-name="myfirebaseapp" 
        path="/myfirebaseappdb/feed/[[selectedFeed]]" 
        data="{{articles}}"> 
    </firebase-query> 

    <app-indexeddb-mirror 
      key="[[selectedFeed]]" 
      data="[[articles]]" 
      persisted-data="{{persistedArticles}}"> 
    </app-indexeddb-mirror> 

    <template is="dom-repeat" 
       items="[[persistedArticles]]" 
       as="article"> 
      <paper-card image="[[article.image]]" alt="image"> 
       <div class="card-content"> 
        <h1 class="card-text">[[article.title]]</h1> 
        <h4 class="card-text">[[article.abstract]]</h4> 
       </div> 
      </paper-card> 
    </template> 

</template> 

<script> 
    Polymer({ 
     is: 'my-view1', 
     ready: function() { 
      this.feeds = [ 
       {name: "Feed1", key: "feed1"}, 
       {name: "Feed2", key: "feed2"}, 
       {name: "Feed3", key: "feed3"}, 
       {name: "Feed4", key: "feed4"} 
      ]; 
     } 
    }); 
</script> 

Was ich tun möchte, ist Cache jedes Futter in indexeddb als Eintrag (Feednamen als Schlüssel und die Daten als Wert), so können sie sein Wird geladen, wenn die App offline ist. Das ist im Grunde, was app-indexeddb-mirror ist, oder?

Allerdings kann ich den Datenfluss zwischen firebase-query und app-indexeddb-mirror nicht verstehen, und ich bekomme indexeddb Eintrag überschrieben/geleert beim Umschalten Tabs.

Gibt es etwas, was ich nicht richtig mache? Vielen Dank.

+0

Wenn sich die Daten aus der 'Firebase-Abfrage' ändern, speichert der 'app-indexeddb-mirror' die Daten zwischen. Dies bedeutet, dass sich die Daten beim Wechseln zwischen Tabs ändern, da sich der 'Pfad' in der' Firebase-Abfrage' ändert, was dazu führt, dass das 'app-indexeddb-mirror'-Element die Daten erneut zwischenspeichert. –

+0

Ich hakte ein paar Beobachter zum Drucken von Protokollen und es sah sicher wie @BenThomas Sie sagten. Ich kann immer noch nicht herausfinden, wie man das richtig macht? Kannst du bitte etwas Licht dazu bringen? Vielen Dank. – Xiang

+0

Sobald selectedFeed sich ändert, ändert es nicht auch sofort den Schlüssel von app-indexeddb-mirror (Datenbindungen sind synchron)? In diesem Fall sollte der Cache mit vorherigem Schlüssel nicht gelöscht/geleert werden, oder? – Xiang

Antwort

0

Ich löste dieses Problem durch Austauschen von Firebase-Abfrage und app-indexeddb-Spiegel. Ich wusste nie, dass Sequenz in Polymer wichtig ist, auch diese Reihenfolge ist ziemlich kontraintuitiv.

+0

Hat mir nicht geholfen. –

+0

Was meinst du? Wie indexedDB sollte über Firebase-Abfrage sein? Ich habe Probleme beim Anzeigen von Daten in Chrom-Dev-Tools. Sehen Sie Ihre Daten dort? Es scheint, als wäre da nichts – TheeBen

Verwandte Themen