Как работать с app-localstorage-документом в Polymer

#session #polymer #local-storage #polymer-1.0

#сессия #полимер #локальное хранилище #polymer-1.0

Вопрос:

Я пытаюсь выяснить, как установить и извлечь значение в app-localstorage-document. Я работал раньше с элементом iron-meta и делал это следующим образом:

       <iron-meta id="meta" key="id" value="{{meta}}"></iron-meta>          

      Polymer({
         is: 'login-form',
         properties: {
           meta: {
            type: String,
            value: ''
           },
         },

         getValue: function() {
           this.meta = '100'
           var savedValue = this.$.meta.byKey('id');
           console.log(savedValue);
         }

      });
  

Но когда я пробую что-то подобное с приложением-localstorage-document, оно просто возвращает:
Обещание {[[PromiseStatus]]: «разрешено», [[PromiseValue]]: не определено}
Я не могу найти ни одного примера того, как работать с этим элементом. Может быть, кто-нибудь сможет мне здесь помочь.

       <app-localstorage-document id="meta" key="id" data="{{meta}}" storage="window.localStorage"></app-localstorage-document>

         Polymer({
          is: 'login-form',
           properties: {
             meta: {
               type: String,
               value: ''
             },
           },

           getValue: function() {
             this.$.meta.setStoredValue('id', '50');
             var savedValue = this.$.meta.getStoredValue('id');
             console.log(savedValue);
           }
         });
  

Ответ №1:

Я все еще изучаю этот элемент самостоятельно. Документация не такая уж прямая. Это то, что я понимаю до сих пор.

Проблема больше в изменении способа, которым вы думаете о доступе к данным хранилища. Элемент app-localstorage-document обрабатывает это за вас.

 <app-localstorage-document id="meta" key="id" data="{{meta}}" storage="window.localStorage"></app-localstorage-document>
  

Атрибут «данные» синхронизируется с ключом хранения «id». Каждый раз, когда обновляется «id», обновляется переменная, присвоенная «данным». Это означает, что в этом случае изменения в ключе «id» будут преобразованы в переменную «meta».

Если вам нужно получить доступ к информации в хранилище, она должна быть доступна в переменной «meta».

 this.meta.name or {{meta.name}}
this.meta.id or {{meta.id}}
  

Это означало бы, что переменная, присвоенная «данным», должна иметь тип Object.

 meta:{
        type:Object,
        value:{},
        notify:true
}
  

В результате, если вы используете этот элемент, нет причин для прямого доступа к локальному хранилищу. Вот для чего предназначен этот элемент.

Комментарии:

1. Я попробую это, а затем приму ваш ответ, если все получится. В итоге я использовал iron-localstorage, потому что он просто казался более простым в использовании.

2. Должно быть, я что-то упускаю — это не сработало. Когда я перезагрузил свою страницу, значения очистились, а не отображались последние использованные значения. железо-localstorage работает.

3. как использовать метод isNew() для инициализации значения, если ключ не сохранен ранее?

Ответ №2:

Основная идея заключается в синхронизации данных в памяти с localStorage.

приложение-localstorage-document хранит «данные» в localStorage или sessionStorage. Любое изменение в потоках данных возвращается в хранилище. В вашем случае вам просто нужно задать объекту {{meta}} желаемые значения, и app-localstorage-document гарантирует, что он сохранен в локальном хранилище.

Поскольку вы всегда можете работать с данными в памяти, вы можете не читать данные из localStorage в том же элементе. Однако для чтения сохраненных данных в других элементах вы могли бы использовать iron-localstorage или даже напрямую читать из localStorage с помощью ключа.