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

时间:2013-01-13 08:28:47

标签: node.js meteor

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

重置应用运行

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

来自控制台。

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

要获得#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();