Backbonejs查看渲染最佳方法

时间:2012-09-29 16:08:47

标签: backbone.js backbone-views backbone-routing

我有一个带有像这样的项目列表的侧边栏视图

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

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

方法1

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

方法2

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

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

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

无论如何,我的问题是我应该使用方法2还是有更好的方法解决这个问题?

由于

1 个答案:

答案 0 :(得分: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});
 }