【问题标题】:Backbone.js Routers confusion (pushState: true, trailing slash)Backbone.js 路由器混淆(pushState:true,斜杠)
【发布时间】:2012-08-02 01:17:35
【问题描述】:

我正在使用带有pushState:true 的Backbone 路由器来处理我网站的网址。 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);
});

第二次尝试

问题:: 这次我删除了root 中的尾部反斜杠,http://domain.com/John 现在触发了路由。这次的问题是当用户在http://domain.com/John(我相信浏览器将其视为名为@9​​87654336@的页面)时出现问题,因此当点击链接(带有属性data-toggle="tab")时,url更改为http://domain.com/Johnphotos 没有单独的/

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

【问题讨论】:

    标签: javascript jquery backbone.js underscore.js


    【解决方案1】:

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

    例如:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-01
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 2019-05-22
        • 2014-06-22
        相关资源
        最近更新 更多