2013-01-13 42 views
4

應用程序是在這裏部署:memoryapp.meteor.com 來源是一個混帳回購協議可在這裏:https://github.com/SnappyCroissant/memoryapp流星反應重繪每一個實體在車把每個循環時,只有1項更新

要重置的應用程序運行

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

從控制檯。

我知道讓客戶端訪問像這樣的集合是不好的,應用程序遠沒有產品準備就緒,我只是通過流星找到我的方式。

目前,無論何時使用卡片進行任何更新,整個DOM都會重新繪製,除了我稱之爲持久化的那些元素。據我所知,雖然元素只能在更新時重繪,或者我誤解了反應性的作用方式?

腳本中發生的唯一真正的動態變化是卡中對象的'state'屬性正在改變。然而它重繪了每個屬性和每個DOM元素,除非明確聲明不要。

是因爲它們全部傳遞給一個數組中的模板嗎?如果是的話,最好的替代方法是什麼?

結構是有點大雜燴,因爲它是一個學習經驗,都爲這一問題的重要位(據我所知)住在client/memory.jsserver/model.js

回答

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();