24

私はシングルページアプリケーションを作成していますが、バックボーンはまったく初めてです。同じwrapper-divを使用する複数のビューの作成に問題があります。

私のセットアップ:

すべてのビューに閉じる機能を追加しました。

Backbone.View.prototype.close = function(){
    this.remove();
    this.off();
    if (this.onClose){
        this.onClose();
    } 
}

ビューをレンダリングし、それらを削除して、新しいビューをレンダリングしたいラッパー-divがあります。したがって、私のSetupViewは次のようになります。

app.SetupView = Backbone.View.extend({
    el: '#my_view_wrapper',
    ...
});

ビューを交換する関数から、次のように現在の(開いている)ビューを閉じます。

var v = this.model.get('view');
v.close();

質問

私の問題は、同じラッパーdivを使用している複数のビューがあることです。しかし、ビューを閉じると、このラッパーdivが削除されているように見え、次に作成しようとしているビューでこのdivが見つかりません。

簡単な解決策があると思いますか?同じラッパーを再利用し、ラッパー自体ではなく、その中のビューのみを削除したいと思います。

4

2 に答える 2

25

remove追加と同じように(後で参照するため):別のオプションは、サブビューを削除するのではなく、単に空にするようにサブビューを上書き$elすることです。例えば。

remove: function() {
      this.$el.empty().off(); /* off to unbind the events */
      this.stopListening();
      return this;
}

個人的には、これを使用すると、実際には使用されないラッパー要素を挿入する必要がなくなります。

于 2013-09-25T11:22:49.310 に答える
17

シナリオでは、既存のDOM要素を「el」値として使用しないでください。バックボーンが要素を作成します。ビューをインスタンス化するときは、次の手順を実行して、ビューを既存のラッピング要素にアタッチできます。

$(viewName.render().el).appendTo('#my_view_wrapper');
于 2012-12-29T17:24:23.077 に答える