単一のモデルに対して複数のビューを作成する場合があります。ビューを閉じると、モデルをコレクションから削除します。複数のビューがある場合にモデルを破棄する場合
複数のビューの場合、モデルに依存する他のビューがあります。
モデルによってはビューが表示されないときはどうすればわかりますか?複数のビューの場合は、いつモデルを破棄する必要がありますか?
単一のモデルに対して複数のビューを作成する場合があります。ビューを閉じると、モデルをコレクションから削除します。複数のビューがある場合にモデルを破棄する場合
複数のビューの場合、モデルに依存する他のビューがあります。
モデルによってはビューが表示されないときはどうすればわかりますか?複数のビューの場合は、いつモデルを破棄する必要がありますか?
これは、適切な方法ではありませんが、それでもあなたはこの次
がdependentView
defaults
var myModel = Backbone.Model.extend({
defaults: function() {
return {
dependentViews: 0
};
}
});
でdependentViews
を宣言し達成することができますが
var view1 = Backbone.View.extend({
initialize: function() {
this.model.set("dependentViews",
this.model.get("dependentViews") + 1);
}
});
var view2 = Backbone.View.extend({
initialize: function() {
this.model.set("dependentViews",
this.model.get("dependentViews") + 1);
}
});
ビューを閉じるとデクリメントがdependentViews
になり、各ビューが破棄されると、dependentViews
という値がチェックされます。値が0の場合は、コレクションからモデルを削除します。
onCloseView: function() {
this.model.set("dependentViews",
this.model.get("dependentViews") - 1);
if (this.model.get("dependentViews") === 0) {
//remove model from collection
}
}
一般ビューのライフサイクルは、モデル/コレクションが変更させてはならない話すが、あなたはそれのための十分な理由を持っていると仮定。
ここでは、Kenny's answerを少し改善していますが、オブジェクトの配列としてdependentViews
を持つことをお勧めします(ビューが永続化されていない場合、ビューの依存性を維持しないことが最善です)。
var myModel = Backbone.Model.extend({
initialize: function() {
this.dependentViews = [];
},
addDependentView: function(view) {
this.dependentView.push(view);
},
closeDependentView: function(view) {
this.dependentViews = _.without(this.dependentViews, view);
if (_.isEmpty(this.dependentViews)) {
//remove model from collection
}
}
})
var view1 = Backbone.View.extend({
initialize: function() {
this.model.addDependentView(this);
}
})
var view2 = Backbone.View.extend({
initialize: function() {
this.model.addDependentView(this);
}
})
...
onCloseView: function() {
this.model.closeDependentView(this);
}
また、オブジェクトの配列は、依存関係のリストについては、便利で、将来的に必要であれば、あなたができることの道を来るかもしれない、従属ビューへのモデルからの呼び出しを行います。
可能性のある別の解決策は、モデルをリッスンするオブジェクトを追跡する手段として内部イベントリスナーレジスタを使用することです。しかし、それはもっと複雑になり、Backboneの内部機能に依存するでしょう。
あなたのソリューションは機能していますが、責任がある複雑さを集中化して、これらの機能をモデルに組み込みます。モデル上の 'addDependentView'と' removeDependentView'関数のように。 –
私は完全に同意する、私は答えを更新しました – mikeapr4
他の回答で示唆されているようにデータモデル内のビュー数を増やすことは良い考えではありません。
私はあなたがビューを作成し、これらのビューを破壊する「場」を持つ単一モデルのため、私は複数のビューを作成して頂く場合
を持っています。これは、親のビュー、コントローラ、ルータのインスタンスなどになる可能性があります。
あなたが持っていない場合、あなたは1つ必要です。
今後のクリーンアップのために、これらのビューインスタンスへの参照が必要です。
あなたがそれを持っていない場合は、それが必要です。
ビューを破棄しているときは、残っているインスタンス数を確認してください。モデルが存在しない場合はモデルを削除してください(一部のユーザー操作に応じてビューが削除された場合、削除の親に通知する必要があります)。
これは、ビュー・インスタンスとモデルの外部で実行する必要があります。
'dependentViews'配列の背後にあるアイデアは正気ですが、' attributes'の一部にするのは良い考えではありません。これは永続的なデータの外に留まるべきロジックです。 –
また、整数のように 'dependentViews 'を使っているのに気づきましたが、配列として初期化しました! –
@EmileBergeronこれを指摘してくれてありがとう...私の投稿を編集 – Kenny