当仅更新1个条目时,流星反应性重新绘制每个循环中的每个实体

Tim*_*ope 4 node.js meteor

该应用程序部署在此处:memoryapp.meteor.com 源代码在git repo中提供:https://github.com/SnappyCroissant/memoryapp

要重置应用运行

Cards.update({}, {$set: {state: 'play'}}, {multi: true})
Run Code Online (Sandbox Code Playgroud)

从控制台.

我知道让客户端访问这样的集合是很糟糕的,应用程序远没有准备就绪我只是通过Meteor找到了解决方法.

目前,只要在卡片中运行任何更新,整个DOM重绘除了那些我称之为持久性的元素.据我所知,虽然元素只应在更新时重绘,或者我误解了反应的工作方式?

脚本中发生的唯一真正的动态变化是'state'卡中对象的属性正在被更改.然而,它重绘每个属性和每个DOM元素,除非明确声明不.

是因为它们都被传递到一个数组中的模板吗?如果是这样的话,最好的替代方法是什么.

该结构是有点大杂烩,因为它是一个学习经验,都为这一问题的重要位(据我所知)住在client/memory.jsserver/model.js

Kiv*_*Kiv 5

要获得响应式实现#each,需要LocalCollection.Cursor直接将对象传递给#each.一个数组不会做任何特殊的事情,当任何元素被更改时,整个数组将被重做,这就是你所看到的:

换句话说,这应该做你想要的:

   return Cards.find({ deck_id: deck['_id'] }, {sort: {order: 1}})
Run Code Online (Sandbox Code Playgroud)

这会导致额外的重新渲染:

   return Cards.find({ deck_id: deck['_id'] }, {sort: {order: 1}}).fetch();
Run Code Online (Sandbox Code Playgroud)