4

我正在使用 Backbone 的路由器pushState:true来处理我的网站的网址。URL 的示例包括:

问题:当用户访问http://domain.com/John/时,执行了预期的功能photos。但是,当用户访问http://domain.com/John时没有斜杠,什么也没有发生;我的猜测是定义的尾部反斜杠root阻止了这种情况。

路由器

var AppRouter = Backbone.Router.extend({

    routes: {
        '': 'photos',
        'photos': 'photos'
    },

    viewing_username: $('#viewing_username').val(),  // eg: 'John'

    photos: function() {
        console.log('photos');
    }
});

var app = new AppRouter();
Backbone.history.start({
    pushState: true,
    root: '/' + app.viewing_username + '/'
});

jQuery

$('a[data-toggle="tab"]').on('click', function(e) {
    app.navigate(e.target.getAttribute('href'), true);
});

第二次尝试

问题::这次我删除了结尾的反斜杠roothttp://domain.com/John现在触发了路由。这次的问题是当用户在http://domain.com/John时(我相信浏览器将其视为名为 的页面John),因此当单击链接(带有属性data-toggle="tab")时,url 更改为http://domain.com/Johnphotos不带分隔符/

我应该如何解决这个问题?

4

2 回答 2

2

我认为如果您将主干更新到最新版本,您的第二次尝试应该会奏效。请参阅此讨论:

https://github.com/documentcloud/backbone/pull/1505

上述更改已于 8 天前合并。

于 2012-08-04T03:25:56.570 回答
0

虽然@shioyama 的回答是正确的,但我经常尽可能使用通配符路由来绕过这种陌生感。

例如:

routes:
  'dashboard(/*subroute)': 'index'

当然,这对于许多应用程序来说是不可能的,但是,它在过去为我节省了时间。

于 2013-03-19T21:34:41.723 回答