【问题标题】:Polymer 1 and Firebase: How to deal with a large dataset with dom-repeat?Polymer 1 和 Firebase:如何使用 dom-repeat 处理大型数据集?
【发布时间】:2018-03-06 20:39:21
【问题描述】:

所以,我正在使用 firebase-query 读取大约 9000 个项目的数据集。

然后我将显示带有 dom-repeat 的项目列表(带有各种过滤和排序选项)。

当我用 10 个左右的项目对其进行测试时一切都很好,但现在我正在阅读完整的数据集,我不知道如何管理它......显示了整个 9000 个项目,这显然不太好管理.

这是我所拥有的简化版本:

<firebase-query path="/organisations" data="{{organisations}}"></firebase-query>

<template is="dom-repeat" id="table" items="{{items}}" as="item" filter="filterList" sort="{{sortList(sortKey)}}" initial-count=20>
     [[item.name]]<br />
</template>

我应该从哪里开始处理大量数据?某种分页,或延迟加载?如果我理解正确,无论如何,这 9000 个项目都是从 Firebase 加载的,所以以一种不会杀死浏览器的方式显示它们(我已经做到了 - 杀死它......)

【问题讨论】:

标签: firebase firebase-realtime-database polymer-1.0 polymerfire dom-repeat


【解决方案1】:

您可以按照@Niklas 的建议使用iron-list。这是一个好方法。但是,如果您热衷于使用dom-repeat,那么下面的示例可能会有所帮助:

<iron-scroll-threshold on-lower-threshold="loadMoreData" lower-threshold="10" scroll-target="document" lower-triggered="{{nearBottom}}">
<template is="dom-repeat" items="{{items}}" sort='showLastItemOnTop' rendered-item-count="{{renItemCount}}">
     [[item.name]]<br />
</template>
</iron-scroll-threshold>

<template is="dom-if" if="[[nearBottom]]">
      <paper-progress indeterminate></paper-progress>
      <div>Loading...</div>
</template>
....
static get properties() { return { 
dataLimit:{
    type:Number,
    value:10
}    }}
....
_loadData() {
        var db = firebase.database();
        var dashRef = db.ref('organisations').limitToLast(this.dataLimit);
        dashRef.on('value', snap => { 
        if (snap.exists()) {
            this.set('items', Object.values(snap.val()));
        }

        });

}
loadMoreData(){
                this.dataLimit += 10;
                this._loadData();
        }
}

【讨论】:

  • 谢谢你,HakanC,这非常有帮助!我做了一些测试,似乎效果很好。我现在正试图弄清楚如何使用 dom-repeat 过滤器并在这种延迟加载的同时进行排序,但我想这是一个单独的主题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2023-04-02
  • 2015-10-01
相关资源
最近更新 更多