Использование операторов switch вместо использования других функций в магистральной маршрутизации

Магистральная маршрутизация позволяет нам маршрутизировать на разные страницы.

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") : ...; 
}
 }

});

Точную реализацию не знаю. Я просто дал краткую идею. Возможно ли это в магистральной маршрутизации?


person Amr    schedule 16.10.2014    source источник
comment
Почему вы хотите иметь одну БОЛЬШУЮ функцию вместо того, чтобы иметь разные функции для разных маршрутов?   -  person Yasser Shaikh    schedule 16.10.2014
comment
Исходя из моих требований, мне не нужны разные функции. Достаточно одной функции.   -  person Amr    schedule 16.10.2014
comment
Тогда нет смысла создавать маршруты и использовать один метод   -  person Yasser Shaikh    schedule 16.10.2014
comment
Любая идея о том, что я должен использовать?   -  person Amr    schedule 16.10.2014
comment
Вы еще не поделились своим вариантом использования   -  person Yasser Shaikh    schedule 16.10.2014
comment
Вы неправильно думаете о функциях. Многие функции на самом деле ведут себя как оператор switch, но с другим синтаксисом. Не зацикливайтесь на слове function. Думайте об этом как о своего рода case.   -  person slebetman    schedule 16.10.2014
comment
Если каждый случай - это всего лишь однострочный и у вас их не так много, тогда сделайте это.   -  person mu is too short    schedule 16.10.2014
comment
Это довольно странная идея, но вы можете легко добраться до нее - создайте маршрут по умолчанию - *any - он будет соответствовать любому маршруту и ​​подключится к вашей функции.   -  person Evgeniy    schedule 16.10.2014
comment
как мне получить точное имя маршрута из маршрутов? Я пробовал, но не знаю, как получить точное имя маршрута. Если я получу имя маршрута, я смогу использовать его в случае переключения   -  person Amr    schedule 16.10.2014


Ответы (1)


Потому что это приведет к кошмарному аду, как только у вас будет более 2 или 3 маршрутов/функций, или вам понадобится что-то большее, чем 2 строки для настройки данных и представлений для каждого маршрута.

Кроме того, гораздо проще тестировать обработчики маршрутов, если вы можете просто вызвать одну функцию.

Если вам нужна одна функция в соответствии с вашими требованиями, то неправильное определение вашего маршрута! Я предполагаю, что вы моделируете одну страницу с функциями поиска и разбивкой на страницы этих результатов поиска. Предположим, что доступ к странице осуществляется с помощью URL-адреса вида «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.

person CharlieBrown    schedule 16.10.2014
comment
Я попытался определить маршруты следующим образом: {'','settings':'main'}, когда я пытаюсь запустить приложение, я получаю сообщение об ошибке Unexpected token , - person Amr; 21.10.2014