流星反应重绘每一个实体在车把每个循环时,只有1项更新

问题描述:

应用程序是在这里部署:memoryapp.meteor.com 来源是一个混帐回购协议可在这里:https://github.com/SnappyCroissant/memoryapp流星反应重绘每一个实体在车把每个循环时,只有1项更新

要重置的应用程序运行

Cards.update({}, {$set: {state: 'play'}}, {multi: true}) 

从控制台。

我知道让客户端访问像这样的集合是不好的,应用程序远没有产品准备就绪,我只是通过流星找到我的方式。

目前,无论何时使用卡片进行任何更新,整个DOM都会重新绘制,除了我称之为持久化的那些元素。据我所知,虽然元素只能在更新时重绘,或者我误解了反应性的作用方式?

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

是因为它们全部传递给一个数组中的模板吗?如果是的话,最好的替代方法是什么?

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

要获得#each的反应实现,您需要将LocalCollection.Cursor对象直接传递给#each。数组不会做什么特别的东西,并在任何元素被改变,这是你所看到的整个阵列将被重做:

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

return Cards.find({ deck_id: deck['_id'] }, {sort: {order: 1}}) 

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

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