将列表分组而不重新绘制Polymer

时间:2015-05-13 14:46:52

标签: dart polymer dart-polymer

我正在努力应对挑战,我认为聚合物(及其可观测量)的一个很好的例子比React更难。

我正在从Firebase中检索聊天消息。当他们进来时,我想确保他们按日期排序,我希望将来自同一用户的连续消息组合在一起。这样,当用户发布连续的消息时,我只能打印一次用户和图片。

-- Load more --
[ ] Dave
  Message
  Message
[ ] Jane
  Message
  Message
[ ] Dave
  Message
[ Add message ]

这需要处理a)N个项目的初始页面,b)进入的新消息和c)加载项目的“加载更多”。这一切都需要按正确的顺序和组进行。

经过几次实施尝试后,这里有一个新项目进入时(通过添加新项目或加载更多项目无关紧要),a)按日期对items进行排序,然后b)将所有内容分组用户的连续消息。

https://dartpad.dartlang.org/3681de332d2e965e2480

问题:因为这会对每个新项目@observable进行排序和重新组合,例如向聊天添加新消息会导致Polymer重新绘制DOM中的整个列表。用户图片实际上闪烁,UI暂时冻结。这是不可接受的。

在聊天应用之前已经做过无数次。什么是正确的(聚合物友好?)方法?

1 个答案:

答案 0 :(得分:2)

Afaik,只有在每次列表的任何部分发生变化时创建一个全新的列表时,才会发生这种情况。如果您可以仅使用所需的更改来修改现有列表,则只应重新呈现已修改的项目。

如果您发布链接到遇到此问题的示例聚合物应用也会有所帮助。

如果要有大量项目,您应该考虑使用core-list-dart元素。它将管理渲染当前视口以及缓冲区。