我有一个带有像这样的项目列表的侧边栏视图
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还是有更好的方法解决这个问题?
由于
答案 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});
}