web-dev-qa-db-ja.com

Backbone model.destroy():コレクションからの明示的な削除は必要ですか?

簡単な質問があります。私は2行のコードを持つ関数を見ています:

_deleteTask: function() {
    this.parent.collection.remove(this.model);
    this.model.destroy();
}
_

コレクションからモデルを削除することになっている最初の行をコメントアウトすると、意図したとおりに機能するように見えます(たとえば、モデルは自動的に削除されます)。 BackboneのWebサイトから、これはモデルの「破壊」機能に関連する説明です。

モデルで「破棄」イベントをトリガーします。これは、それを含むコレクションを介してバブルアップします。

this.parent.collection.remove(this.model);を削除してもコードの機能に影響を与えないと想定しても安全ですか?これは私が思うことですが、私はそれを確かめたかったです。

ありがとうございました!

22
AndraD

モデルを破棄すると、モデルを含んでいたコレクションから削除されます。 バックボーンソース で確認できます

//Internal method called every time a model in the set fires an event.
_onModelEvent: function(event, model, collection, options) {
    ...
    if (event === 'destroy') this.remove(model, options);

そのため、コレクションからモデルを明示的に削除する必要はないと思います。

しかし、私を信じないで、自分でテストしてください:)

deleteTask: function() {
    that = this;
    this.model.destroy({
      success: function() {
        console.log(that.parent.collection);
      }
    });
}

コンソールを自分でチェックして、モデルがコレクションから削除されたかどうかを確認してください。

34
asgeo1