0

私はそのようなアイテムのリストを備えたサイドバービューを持っています

SideBarView = Backbone.View.extend(
  events:
    "click item": "dosomething"
  render:
    //Render item list from a collection
)

現在、2つの異なるルートでサイドバービューを表示しようとしていますが、少し問題が発生しました。ルートAでは、dosomething()メソッドで「A」を出力し、ルートBIでは、dosomething()メソッドで「B」を出力します。それで、私はこの問題への最善のアプローチは何であるか疑問に思いましたか?私はそれについて考え、次の2つのアプローチを思いつきましたが、どちらも十分にエレガントではないようです。

アプローチ1

別のSideBarViewを作成し、それをSideBarView2と呼び、メソッドdosomethingをdosomethingForRouteBに変更します。したがって、ルートBにSideBarView2を使用できます。ただし、これはDRYの原則に違反しています。言うまでもなく、後でSideBarViewのレンダリング方法を変更したい場合は、2つの異なる場所で変更を加える必要があります。全体として、これは非常に悪いアプローチだと思います

アプローチ2

dosomething()メソッド内で、次のようなロジックステートメントを使用できます。

route = getCurrentRoute()
if(route = "/routeA")
 print A
else
 print B

アプローチ1よりも少しエレガントですが、ビュー内に論理ステートメントを含めるのは少しハッキーすぎます。

とにかく、私の質問は、アプローチ2を使用する必要があるのか​​、それともこの問題に対するより良いアプローチがあるのか​​ということです。

ありがとう

4

1 に答える 1

2

表示したいもののパラメータをSideBarViewに受け入れさせてみませんか。

SideBarView = Backbone.View.extend({
    print_value: B,

    events: {...},

    initialize: function(options){
        options = options || {};
        if(options.display === 'A'){
             this.print_value = "A";
        }
     },

     render: function(){ ...}
}

そしてあなたのルーターで:

 route_method: function(path){
     new SideBarView({display: path});
 }
于 2012-09-29T17:12:15.517 に答える