Как запретить элементу firebase-query обновлять данные

Я использую полимер и FireBase для создания веб-приложения. Чтобы получить список в базе данных, я использую элемент "firebase-query" PolymerFire.

Теперь список элементов, которые я получаю из базы данных, - это сообщения, которые люди публикуют в моем приложении. Теперь у меня есть элемент firebase-query так:

<firebase-query
  id="query"
  path="/posts"
  limit-to-last="15"
  data="{{posts}}">
</firebase-query>

и я имею dom-repeat шаблон тега для отображения сообщений, подобных этому

<template is="dom-repeat" items="[[posts]]" as="post">
  <div>[[post.content]]</div>
</template>

Теперь, если у меня будет куча людей, публикующих много контента одновременно, этот список будет обновляться каждую секунду, и его будет трудно читать.

Есть ли способ предотвратить firebase-query элемент, чтобы остановить обновление после завершения начальной загрузки, и, возможно, обновить снова, когда я вызываю определенную функцию?

Я попытался добавить отключенный атрибут, но он просто удаляет все, что находится внутри data атрибут ({{posts}} в моем случае), поэтому, когда отключен, ничего не появляется на экране.

1 ответ

Решение

Я не знаком с firebase-query, но вы можете сделать простой трюк. На имущество posts задавать observer функция.

posts: {
 Type: Array,
 value: function(){return []},
 observer: "debouncePosts"
}

затем в js вы можете определить функцию debounce, где я установил, например, 10 000 милисекунд (10 секунд) и вызвал некоторую функцию обратного вызова, где я установил this.posts в currentPosts собственность, которая будет предоставлена ​​в template,

debouncePosts: function(data) {
  this.debounce("debouncePost", function(){
    this.set("currentPosts", this.posts);
  }.bind(this), 10000)
}

и HTML шаблон будет выглядеть так:

<template is="dom-repeat" items="[[currentPosts]]" as="post">
  <div>[[post.content]]</div>
</template>

документация для обсуждения: https://www.polymer-project.org/1.0/docs/api/Polymer.Base#method-debounce

Если вам нравится делать это по-другому, например, обновлять данные всякий раз, когда пользователь нажимает кнопку update, теперь это действительно просто для вас. Просто нажмите на какую-то кнопку, и тогда в функции вы будете делать что-то вроде this.set("currentPosts", this.posts)

Другие вопросы по тегам