4

アプリはここにデプロイされます:memoryapp.meteor.com ソースは、こちらの git リポジトリで入手できます: https://github.com/SnappyCroissant/memoryapp

アプリの実行をリセットするには

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

コンソールから。

このようなコレクションにクライアントがアクセスするのは良くないことだとわかっています。アプリは本番環境にはほど遠い状態です。Meteor を使って自分の道を見つけているところです。

現在、カードで更新が実行されるたびに、DOM永続性を呼び出した要素を除いて全体が再描画されます。私の知る限り、要素は更新されたときにのみ再描画する必要がありますか、それとも反応性の仕組みを誤解していますか?

スクリプト内で発生する唯一の実際の動的変更は'state'、Cards 内のオブジェクトのプロパティが変更されることです。それでも、明示的に宣言されていない限り、すべてのプロパティとすべての DOM 要素を再描画します。

それらはすべて1つの配列でテンプレートに渡されるためですか? もしそうなら、これを行うための最良の代替方法は何ですか.

構造は少しごちゃまぜです。これは学習経験であり、問​​題のすべての重要なビット (私が知る限り) が存在しclient/memory.jsserver/model.js

4

1 に答える 1

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();
于 2013-01-13T20:06:42.193 に答える