Почему мои события магистрального маршрута не работают?

Может кто-нибудь объяснить, почему router.on("route:myTest", function(page) {}); не работает?

Мой Backbone.Router выглядит следующим образом:

var MyRouter = Backbone.Router.extend({
    initialize: function(){
        Backbone.history.start({ pushState:true, root:"/subdir/" });
    },
    routes: {
        '' : 'start',
        'base' : 'myTest',
        'base/:name': 'myTest',
        'base/:name/:skill': 'myTest',
        '*default': 'defaultRoute'
    },
    start: function(){
        alert('Chapter 5 route invoked');
    },
    defaultRoute: function(){
        alert('Router does not handle this route');
    },
    myTest: function(name,book){
        if(name !== undefined){
            if(book !== undefined){
                alert([name, 'is reading', book].join(' '));
            }else{
                alert('Saying hello to ' + name);
            }
        }else{
            alert('Saying hello!');
        }
    }
});

Вот код на моей html-странице:

function showBook(name){
    console.log('Show book ' + name);
    router.navigate('book/' + name);
}
router.on("route:myTest", function(page) { showBook('TestBook'); });

person Wilhelm    schedule 07.09.2014    source источник


Ответы (1)


Backbone.Router не запускает события только для имени маршрута (в данном случае myTest). Если вы посмотрите на документы, вы увидите, что маршрутизатор запускает события route, route:[name], поэтому вам следует вместо этого используйте следующее:

router.on('route:myTest', function(){});

Это событие будет запущено, если маршрут соответствует base, base/:name, base/:name/:skill, что может быть или не быть тем, что вы ищете.

person Cubed Eye    schedule 07.09.2014
comment
Спасибо за вашу помощь. Я использовал 'route:myTest', мой первоначальный пост был опечаткой. Извините, это была моя ошибка. Я обновил свой пост, чтобы отразить мой фактический код (внизу) - person Wilhelm; 07.09.2014