ビュー内でモデル内のコレクションからアイテムを削除する際に問題が発生します。基本的にはモデル/コレクション構造は以下の通りです:backbone.jsコレクションが表示内のアイテムを正しく削除していません
基本的に私は、サブ項目にサブアイテムコレクションから項目を削除しようとすると、実際にそれを見るコレクションから正しい項目を削除します。しかし、私がメインモデルを維持するために来るとき、そのアイテムはまだコレクションに入っているようです。
これは私の意見はどのように構成されるか:
メインビューは、メインモデルで必要とされるDOMノードを挿入し、それらをメインモデルがなどすべてのビューがあるアイテムモデルの新しいビューを作成しますそのようなモデルのオプションとしてメインモデル取得:
new App.Views.MainModelView({
model : this.model,
el : $('#nodeID')
})
を唯一の違いは、ビューとテンプレートの使いやすさを再に起因する、私はまだメインに渡し、小項目モデルビューの作成でありますモデルではありますが、私はまた、アイテムコレクションの中のitemレンタルされています。これは以下のようになります。私は、次の操作を行い、サブアイテムのビューinitメソッドで
new App.Views.ItemView({
model : this.model,
item : this.selectedItem,
el : $('#nodeID')
});
:
this.item = (this.options.item) ? this.options.item : this.model;
私は、サブアイテムコレクションからサブ項目を削除するには:
removeSubItem : function(e) {
// get the id of the sub-item to be removed
var id = $(e.target).closest('tr').attr('data-id');
if (!id) throw "Could not retrieve data id";
// retrieve the sub-item from the collection
var subItem = this.item.subItems.get(id);
// remove the sub-item from the collection
this.item.subItems.remove(subItem);
},
前に述べたように、サブアイテムを削除してビューで修正されたコレクションを調べると、サブアイテムがコレクションから削除されていることがわかりますが、アイテムが再表示されます。私は、サブアイテムの突然の出現を説明することができるサブアイテムのコレクションがクローンされる可能性があると考えています。
これはかなり特殊な問題であることは知っていますが、これ以上の情報が必要な場合は、私がここで提供している問題の原因になるかどうかはわかりません。すべてのあなたの助けを
おかげで、
ヴィンセント
==========のいくつかに答えるためにEDIT ============
以下の質問では、この問題が発生している範囲を概説します。
私がコンソールにthis.item.subItemsコレクションをSubItemビューに記録すると、removeSubItemが呼び出された後、私はSubItemのインスタンスモデルが正常に削除されました。 メインモデルのsaveメソッドを呼び出す前に、IコンソールはtoJSON関数の戻り値を記録します。この時点で、以前に削除されたインスタンスがコレクション内に「戻る」という問題が発生しています。私はWiresharkとGoogle Chromeの開発者コンソールの両方でクライアントとサーバーの間のトラフィックを監視しており、モデルを更新するサーバーへの呼び出しはありません。
サブ項目コレクションのtoJSONメソッドは次のようになります。
toJSON : function() {
App.log(["SubItem::collection::toJSON", this], "info");
var json = {};
// make sure the key for each SubItem is the primary key
this.each(function(subItem) {
json[subItem.get('id')] = subItem.toJSON();
});
return json;
}
「永続化」とはどのような意味があるのか、どうやってどのようにリロードするのかを説明してください。 – Julien
私が永続化を話すとき、私はサーバー上にモデルを保存することを意味します。したがって、メインモデルでsaveメソッドを呼び出します。保存は、一連のネイティブまたはオーバーライドされたtoSSONメソッドを使用して行われます。詳細は編集をご覧ください。 – luxerama