2012-02-15 2 views
0

У меня есть приложение node.js (server) и backbone.js (client) - я могу загрузить и запустить мое базовое приложение на странице ... и запустить маршрутизатор, но мой маршрут по умолчанию («. *») не вызывается. Я могу вручную вызвать функцию индекса после инициализации маршрутизатора, но мне не нужно делать этот шаг, когда я создаю базовые приложения поверх рельсов.Маршруты не обработаны

Кто-нибудь знает, почему это происходит?

добавления кода (в CoffeeScript):

class NodeNetBackbone.Routers.RegistryPatients extends Backbone.Router 
    routes: 
    ''   : 'index' 
    '.*'  : 'index' 
    '/index' : 'index' 
    '/:id'  : 'show' 
    '/new'  : 'new' 
    '/:id/edit' : 'edit' 

    initialize: -> 
    console.log 'init the router' 
    @registry_patients = new NodeNetBackbone.Collections.RegistryPatients() 
    # TODO: Figure out why this isn't sticking... 
    @registry_patients.model = NodeNetBackbone.Models.RegistryPatient 
    # TODO: Try to only round trip once on initial load 
    # @registry_patients.reset($('#container_data').attr('data')) 
    @registry_patients.fetch() 

    # TODO: SSI - why are the routes not getting processed? 
    this.index() 

    index: -> 
    console.log 'made it to the route index' 
    view = new NodeNetBackbone.Views.RegistryPatients.Index(collection: @registry_patients) 
    # $('#container').html('<h1>Patients V3: (Backbone):</h1>') 
    $('#container').html(view.render().el) 
+2

Можете ли вы показать некоторые примеры того, как вы определяете ваши маршруты? – loganfsmyth

+0

без примеров кода мы не можем понять, что можно исправить, поэтому предоставьте код – Sander

+0

Ну, я собираюсь пойти на догадку, но маршрут по умолчанию не '' *. ''. Это только '' '' (пустая строка). –

ответ

0

Магистральные маршруты не являются регулярные выражения (если вручную добавить маршрут регулярных выражений с помощью route). От fine manual:

Маршруты могут содержать части параметров, :param, которые соответствуют один компонент URL между косой черты; и splat-части *splat, которые могут соответствовать любому количеству компонентов URL.

[...] Маршрут "file/*path" будет соответствовать #file/nested/folder/file.txt, минусов "nested/folder/file.txt" к действию.

И если мы проверим источник, we'll see this:

// Backbone.Router 
// ------------------- 
//... 
// Cached regular expressions for matching named param parts and splatted 
// parts of route strings. 
var namedParam = /:\w+/g; 
var splatParam = /\*\w+/g; 

Таким образом, ваш '.*' маршрут должен соответствовать только буквальное '.*', а не соответствие «ничего», как вы ожидали.

Я думаю, что вы хотите что-то более, как это:

routes: 
    ''   : 'index' 
    #... 
    '*path'  : 'index' 

Убедитесь, что ваш *path маршрут на the bottom of your route list:

// Bind all defined routes to `Backbone.history`. We have to reverse the 
// order of the routes here to support behavior where the most general 
// routes can be defined at the bottom of the route map. 

Это предположение о «порядке» элементов в объекте выглядит довольно опасным и недобросовестным для меня как there is no guaranteed order:

Механика и порядок перечисления свойств (шаг 6.a в первом алгоритме, шаг 7.a во втором) не указывается.

Я думаю, вы бы лучше добавлять маршрут по умолчанию *path вручную в методе initialize:

class NodeNetBackbone.Routers.RegistryPatients extends Backbone.Router 
    routes: 
    ''   : 'index' 
    '/index' : 'index' 
    '/:id'  : 'show' 
    '/new'  : 'new' 
    '/:id/edit' : 'edit' 

    initialize: -> 
    console.log 'init the router' 
    @route '*path', 'index' 
    #...