应用程序部署在此处:memoryapp.meteor.com
源代码在git repo中提供:https://github.com/SnappyCroissant/memoryapp
重置应用运行
Cards.update({}, {$set: {state: 'play'}}, {multi: true})
来自控制台。
我知道让客户端访问这样的集合是很糟糕的,应用程序远没有准备就绪我只是通过Meteor找到了我的方式。
目前,每当卡片中运行任何更新时,整个DOM
重绘除了那些我称之为持久性的元素。据我所知,虽然元素只应在更新时重新绘制,或者我误解了反应性的工作方式?
脚本中发生的唯一真正的动态变化是卡中对象的'state'
属性正在被更改。然而,它重绘了每个属性和每个DOM元素,除非明确声明不是。
是因为它们都被传递到一个数组中的模板吗?如果是这样的话,最好的替代方法是什么。
结构有点大杂烩,因为它是一种学习经验,问题的所有重要部分(据我所知)都存在client/memory.js
和server/model.js
答案 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();