0

我有一个侧边栏视图,其中包含这样的项目列表

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

现在,我试图在两条不同的路线上显示侧边栏视图,但遇到了一个小问题。在路由 A 上,我希望 dosomething() 方法打印“A”,而在路由 BI 上,我希望 dosomething() 方法打印“B”。所以,我想知道解决这个问题的最佳方法是什么?我想了想,想出了以下两种方法,但似乎都不够优雅。

方法一

制作另一个 SideBarView 并将其命名为 SideBarView2,然后将方法 dosomething 更改为 dosomethingForRouteB。那么我可以将 SideBarView2 用于路由 B。但是,这违反了 DRY 原则;更不用说,假设我想稍后更改 SideBarView 的渲染方法,那么我将不得不在两个不同的地方进行更改。总的来说,我认为这是一个非常糟糕的方法

方法二

在 dosomething() 方法中,我可以有这样的逻辑语句

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

比方法 1 更优雅一点,但在你的视图中有一个逻辑语句有点太 hacky。

无论如何,我的问题是我应该使用方法 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 回答