更新: これは、私が取り組んでいたプロジェクトの動作デモです: http://www.newedenfaces.com
2 つのサムネイル (コレクション) を保持するPeopleViewと、各サムネイル自体 (モデル)のPersonViewの 2 つのビューがあります。
これは基本的に、2 つの画像を並べた Facemash のクローンです。1 人がゲームに勝った場合、別の 1 人がゲームに負けます。
wins countを更新するには、簡単です。これをPersonViewに追加するだけです。
// Model View
events: {
'click img': 'winner'
},
winner: function() {
this.model.set('wins', this.model.get('wins') + 1);
this.model.save();
}
しかし、損失数を増やして他のモデルを更新するにはどうすればよいでしょうか? それとも、個々のモデルではなく、コレクション レベルでこの種のロジックを実行する必要がありますか?
アップデート
エレガントな解決策が見つかるまで、このハックを使用してこの問題を解決できました:
// Collection View
initialize: function() {
this.collection.on('change:wins', this.updateLosses, this);
},
updateLosses: function(model) {
var winnerIndex = this.collection.indexOf(model);
var otherModel = this.collection.at(Math.abs(1 - winnerIndex));
otherModel.set('losses', otherModel.get('losses') + 1);
otherModel.save();
this.render();
},
私のPersonViewはまだ勝利数の更新を処理します。ただし、PeopleViewコレクション ビューは、勝利数が更新されたときにイベントをリッスンします。それが発生すると、そのモデルが取得され、そのインデックス位置が取得されます。私は 2 ビュー / 2 モデルしか持っていないので、もう一方のモデルは「敗者」だったに違いありません。を介して他のモデルのインデックスを取得し、Math.abs(1 - winnerIndex)
必要なことはその損失数を更新することだけです。
注:バックボーンの学習を始めたばかりなので、これを使用するのは初めてのプロジェクトです。これを行うためのより良い方法があることを本当に願っています。わかっている場合は、回答を投稿して、この質問を受け入れて閉じることができます。