app-indexeddb-mirror с помощью Polymerfire

Я создал простую страницу с несколькими вкладками. Каждая вкладка загружает фид (коллекцию / список) статей из Firebase и отображает карточки на странице. Все работает так, как я хотел, пока я не попытался сохранить посещенные каналы в indexeddb с помощью app-indexeddb-mirror.

Вот что я сделал:

<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>

What I want to do is cache each feed into indexeddb as an entry (feed name as key and the data as value), so they can be loaded when the app is offline. That's basically what app-indexeddb-mirror is for, right?

Однако я не могу разобраться в потоке данных между firebase-query и app-indexeddb-mirror, и при переключении вкладок я продолжаю перезаписывать / очищать indexeddb запись.

Я что-то делаю неправильно? Спасибо.


comment
Когда данные из firebase-query изменяются, app-indexeddb-mirror кэширует данные. Это означает, что при переключении вкладок данные изменятся, потому что path на firebase-query изменяется, что, в свою очередь, приведет к повторному кэшированию данных элементом app-indexeddb-mirror.   -  person Ben Thomas    schedule 26.09.2016
comment
Я подключил пару наблюдателей к печати журналов, и это действительно выглядело так, как ты сказал @BenThomas. Я до сих пор не могу понять, как это сделать правильно? Не могли бы вы пролить свет на это? Спасибо.   -  person Xiang    schedule 27.09.2016
comment
После изменения selectedFeed не изменится ли он сразу же и ключ app-indexeddb-mirror (привязки данных синхронны)? В таком случае кеш с предыдущим ключом не нужно очищать / очищать, верно?   -  person Xiang    schedule 27.09.2016
comment
Да, я ожидал, что он будет храниться против разных ключей, как вы сказали. Может это баг?   -  person Ben Thomas    schedule 27.09.2016


Ответы (1)


Я решил эту проблему, поменяв местами firebase-query и app-indexeddb-mirror. Я никогда не знал, что такое последовательность в Polymer, также этот порядок довольно нелогичен.

person Xiang    schedule 06.10.2016
comment
Мне не помогло. - person Artem Novikov; 27.05.2017
comment
Что ты имеешь в виду? Например, indexedDB должен быть выше firebase-query? У меня проблемы с просмотром данных в инструментах Chrome Dev. Вы видите там свои данные? Вроде там ничего нет - person TheeBen; 19.10.2017