3

バックボーン ビューを再利用可能にする最適なオプションを見つけようとしています。私はゴーグルしてさまざまな解決策を見つけましたが、どれが私の要件に合っているかわかりません. 基本的に、リアルタイム データで満たされた多くのウィジェットを用意し、サービス サブスクリプションを処理する基本コンポーネントが必要です。

この問題の最善の解決策は次のとおりです。

App.View.Base = Backbone.View.extend({
  baseMethod: function( params ) {};
});

App.ExtendedView.Base = App.View.Base.extend({
  // new stuff here

  // overriding App.View.Base.baseMethod
  baseMethod: function( params ) {
    // overriding stuff here 
    App.View.Base.prototype.baseMethod.call(this, params); // calling super.baseMethod()
  }
});

より良いアプローチはありますか?またはミックスインを使用する必要がありますか?

バックボーン ビュー

4

2 に答える 2

1

私がこのようなものに使用する典型的な経験則は、基本クラスに、すべてのサブクラスに共通のコンテキストを提供する不変のメソッドがある場合、継承は理にかなっています。たとえば、Backbone アプリケーション用に次のような BaseView クラスを作成しました。

define(function() {
    return Backbone.View.extend({
        /**
         * show() and hide() are immutable
         */
        show : function() {
            this.beforeShow();
            this.doShow();
            this.afterShow();
        },
        hide : function() {
            this.beforeHide();
            this.doHide();
            this.afterHide();
        },
        doShow : function() {
            this.$el.show();
            this.trigger('displayComplete', {action : 'show'});
        },
        doHide : function() {
            this.$el.hide();
        },
        //Override the following to extend behavior of the view
        //before and/or after the view is shown/hidden.            
        beforeShow : function() {},
        beforeHide : function() {},
        afterShow : function() {},
        afterHide : function() {}
    });
});

これは非常に単純な例ですが、ビューを表示および非表示にするための共通インターフェイスが中央コントローラー オブジェクトに与えられているため、アプリケーションの開発がはるかに簡単になることが証明されています。ここでもコンポジションを使用できると思いますが、実行時に明示的に extends() を実行する必要があります。どちらの場合でも同じ結果が得られますが、ビューをインスタンス化するときに機能を利用できるようにしたいだけです。

別の考えは、それはあなたが達成したいことに本当に依存しているということです. 継承は構成よりもはるかに厳密ですが、繰り返しますが、それは最終的に何を達成したいかによって異なります。コンテキストを維持するために剛性を強制することは良いことです。

于 2013-05-17T17:48:18.627 に答える