Маршруты по умолчанию в контроллере Backbone.js? - PullRequest
45 голосов
/ 22 мая 2011

Я хочу установить маршрут по умолчанию для моего контроллера backbone.js. В настоящее время я делаю это так:

class DealSearchController extends Backbone.Controller
    routes:
        'list' : 'showListView'
        'photos' : 'showPhotoView'
        'map' : 'showMapView'

    initialize: ->
        ....        
            window.location.hash = 'list' if ! _.include( _.keys(@routes),(window.location.hash || '').replace('#',''))

Есть ли лучший способ сделать это?

Ответы [ 2 ]

85 голосов
/ 23 мая 2011

Попробуйте добавить этот дополнительный маршрут в качестве последнего маршрута в вашем контроллере:

'*path':  'defaultRoute'

, а затем обработайте это так:

defaultRoute: function(path) {
    this.showListView();
}

Предполагается, что список маршрутов является вашим предпочтительным по умолчанию. Это должно работать, так как Backbone.js будет соответствовать маршрутам по порядку, но всегда будет соответствовать маршруту "splat".

2 голосов
/ 17 ноября 2015

Вы можете использовать формат маршрута splat для определения универсального маршрута, например:

routes:
  'list' : 'showListView'
  '*path': 'defaultRoute'

defaultRoute: ->
  ...

Эти знаки могут соответствовать любому количеству компонентов URL.Так как тот, который приведен здесь, по существу, соответствует чему-либо, порядок, в котором определены маршруты, имеет значение.Более ранние правила, перечисленные в литерале routes, имеют приоритет над более поздними. Таким образом, правило всеохватывающего списка должно быть указано последним.

Замечание по предупреждению : Механизм оператора for in оставляетпорядок итерации ключей в объектах не указан ( ECMA-262 раздел 12.6.4 ):

Механизм и порядок перечисления свойств ... не указан.

Большинство браузеров, если не все с некоторыми ошибочными исключениями, будут выполнять итерацию в порядке определения.Если определенные маршруты имеют неоднозначность, правильное разрешение которой зависит от упорядочения (как в этом случае), и / или если явное упорядочение может быть предпочтительным из-за непредсказуемой среды, также возможно динамическое определение маршрутов в Router.Инициализатор, а не декларативно / статически:

initialize: function () {
    //router.route(route, name, [callback]);
    this.route('*path', 'default', this.defaultRoute);
    this.route('map', 'map', this.showMapView);
    this.route('photos', 'photos', this.showPhotoView);
    this.route('list', 'list', this.showListView);
}

В этом случае маршруты, определенные позже, переопределяют ранее определенные маршруты, поэтому порядок из более ранних значений меняется на обратный, чтобы сохранить то же поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...