使用switch语句而不是在Backbone路由中使用不同的功能

时间:2014-10-16 05:32:51

标签: javascript backbone.js backbone-routing

骨干路由允许我们路由到不同的页面。

var Workspace = Backbone.Router.extend({

  routes: {
  "help":                 "help",    // #help
  "search/:query":        "search",  // #search/kiwis
  "search/:query/p:page": "search"   // #search/kiwis/p7
 },

 help: function() {
  ...
 },
 search: function(query, page) {
  ...
 }

});

我的问题是不是为不同的路由编写不同的函数,为什么不为所有路由编写单个函数,并使用switch语句来确定确切的路由并根据路由执行任务。

它看起来像这样。

var Workspace = Backbone.Router.extend({

 routes: {
"help":                 "main",    // #help
"search/:query":        "main",  // #search/kiwis
"search/:query/p:page": "main"   // #search/kiwis/p7
 },

 main: function() {
...
switch(){

 case("help") : ...;
 case("search") : ...; 
}
 }

});

我不知道具体的实施方式。我只是简单介绍一下。这是否可以在Backbone路由中使用?

1 个答案:

答案 0 :(得分:0)

因为只要你有超过2 3个路线/功能,这将导致一场噩梦般的地狱,或者你需要更多的2行来设置每条路线的数据和视图。

此外,如果您只需调用一个函数,那么测试路由处理程序要容易得多。

如果您根据自己的要求需要一个功能,那么您的路线定义有什么不对!我假设您正在使用搜索功能和这些搜索结果的分页对单个页面进行建模。我们假设该网页上有一个网址,例如" yourapp /#page":

输入可选参数我的朋友::) http://backbonejs.org/#Router-routes

var Workspace = Backbone.Router.extend({
  routes: {
    "page(/search/:query)(/:page)": "main"
  },
  main: function(query, page) {
    if(query) {
      //you're searching
      if(page) {
         //display specific page
      }
      else {
         //show first results page
      }
    }
    else {
      //show you initial views/models
    }
  }
});

该路线将处理:page,page / search / apples和page / search / apples / 4