Dart 将列表分组,而不重新绘制聚合中的整个DOM

Dart 将列表分组,而不重新绘制聚合中的整个DOM,dart,polymer,dart-polymer,Dart,Polymer,Dart Polymer,我面临着一个挑战,我认为这是一个很好的例子,聚合物(及其可观察物)比反应更困难 我正在从Firebase检索聊天信息。当它们出现时,我希望确保它们按日期排序,并且我希望将来自同一用户的连续消息分组在一起。这样,当用户发布连续消息时,我可以只打印一次用户和图片 -- Load more -- [ ] Dave Message Message [ ] Jane Message Message [ ] Dave Message [ Add message ] 这需要处理a)N个项

我面临着一个挑战,我认为这是一个很好的例子,聚合物(及其可观察物)比反应更困难

我正在从Firebase检索聊天信息。当它们出现时,我希望确保它们按日期排序,并且我希望将来自同一用户的连续消息分组在一起。这样,当用户发布连续消息时,我可以只打印一次用户和图片

-- Load more --
[ ] Dave
  Message
  Message
[ ] Jane
  Message
  Message
[ ] Dave
  Message
[ Add message ]
这需要处理a)N个项目的初始页面,b)传入的新消息和c)加载旧项目的“加载更多”。所有这些都需要按照正确的顺序和分组进行

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

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

问题是:由于这会对每个新项目上的
@observable
字段进行排序和重新组合,因此向聊天中添加一条新消息会导致Polymer在DOM中重新绘制整个列表。用户图片实际上会闪烁,用户界面会暂时冻结。这是不能接受的


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

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

如果您可以发布一个链接到遇到此问题的示例聚合物应用程序,这也会很有帮助

如果有大量项目,您可能应该考虑使用
核心列表dart
元素。它将仅为您管理当前视口和缓冲区的渲染