0

モデルとしてa を使用するUserPanelビューがあります。UserModelのテンプレートにはUserPanel、モデルが であるかどうかをチェックする条件がありundefinedます。モデルが存在する場合、ユーザー情報が表示されます。そうでない場合は、「登録」フォームが表示されます。

のユーザー情報部分にはUserPanel、基本的に「登録解除」ボタンがあります。ユーザーがクリックすると、ユーザー情報が削除されます。はUserPanel再レンダリングによって応答し、別の を登録できるようにしますUserModel

常識では、this.model.destroyと呼ぶように言われています。この方法を使用すると、モデルはデータ ストアから削除されますが、オブジェクトは にまだ存在しthis.modelます。ビューがモデルの更新に ( を呼び出してrender) 応答するとき、すべてのデータなどを含む有効なモデルがあると見なされます。で delete を呼び出すことができますthis.modelが、それはイベントをトリガーしません。deleteモデルを削除する前にビューが更新されるため、I の前にイベントをトリガーすることはできません。モデルの削除に応答するようにビューをセットアップしました。メソッドはdelete、モデルを単純に使用してから を呼び出しますrender。これは機能しますが、これらのメソッドはビューの更新を処理するためのものであり、モデルを操作するためのものではないため、概念レベルで気になります。

一般に、コレクションに保存されていないモデルを明示的に破棄する適切な方法は何ですか?

編集: Backbone.localStorageをデータ ストアとして使用しています。これには何か関係があるのか​​もしれません。

4

2 に答える 2

0

イベントにバインドする代わりに、次のようなdestroy成功のコールバックを使用します。model.destroy

this.model.destroy({ success: _.bind(this.onModelDestroySuccess, this) });

次に、名前を次のように変更modelDestroyedViewonModelDestroySuccessます。

onModelDestroySuccess: function () {
  delete this.model;
  this.render();
},

cleanupModelEventsモデルへのイベント バインディングをクリーンアップするメソッドも定義します。

cleanupModelEvents: function() {
  this.stopListening(this.model);
},

そしてそれを呼び出すonModelDestroySuccess

onModelDestroySucess: function () {
  this.cleanupModelEvents();
  delete this.model;
  this.render();
},

お役に立てれば。

于 2013-11-06T04:04:40.170 に答える