流星反应重绘每一个实体在车把每个循环时,只有1项更新
问题描述:
应用程序是在这里部署:memoryapp.meteor.com
来源是一个混帐回购协议可在这里:https://github.com/SnappyCroissant/memoryapp流星反应重绘每一个实体在车把每个循环时,只有1项更新
要重置的应用程序运行
Cards.update({}, {$set: {state: 'play'}}, {multi: true})
从控制台。
我知道让客户端访问像这样的集合是不好的,应用程序远没有产品准备就绪,我只是通过流星找到我的方式。
目前,无论何时使用卡片进行任何更新,整个DOM
都会重新绘制,除了我称之为持久化的那些元素。据我所知,虽然元素只能在更新时重绘,或者我误解了反应性的作用方式?
脚本中发生的唯一真正的动态变化是卡中对象的'state'
属性正在改变。然而它重绘了每个属性和每个DOM元素,除非明确声明不要。
是因为它们全部传递给一个数组中的模板吗?如果是的话,最好的替代方法是什么?
结构是有点大杂烩,因为它是一个学习经验,都为这一问题的重要位(据我所知)住在client/memory.js
和server/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();