【问题标题】:Backbone pushState and Laravel 4 - Routes won't workBackbone pushState 和 Laravel 4 - 路由不起作用
【发布时间】:2013-10-07 10:54:50
【问题描述】:

我有一个非常简单的 laravel 4 设置,带有 1 个用于旅行的控制器。 现在另一个简单的 Backbone 设置,带有路由器和路由到常规路由,如tripstrips/create。我想使用 pushState: true 来获得漂亮的 URL,但我似乎无法让它工作。当我尝试访问 URL 时,它会将我发送到服务器提供的带有我的 json 数据的页面。

但是,如果我输入:www.mysite.com/#trips,我将被“重定向”到www.mysite.com/trips,然后我针对此特定路由的方法就会触发。

这是我的路由器:

App.Router = Backbone.Router.extend({
routes: {
    '': 'index',
    'trips':            'trips',
    'trips/create':     'newTrip',
    'trips/:id':        'showTrip'
},

index: function(){

},

trips: function(){
    console.log('All trips') ;
},

newTrip: function(){

    console.log('New trip') ;

},

showTrip: function(id){
    console.log('trips id:' + id) ;
}
});

【问题讨论】:

  • 你的 pushState 启用了吗?
  • 是的。我有 history.start({ pushState: true });
  • pushState 的服务器端方面你做过了吗?服务器也必须知道所有路由。这是关于这个主题的另一个问题:stackoverflow.com/questions/11731998/…
  • 我有 laravel 处理的所有路由。当我直接输入它们时,我可以在浏览器中访问它们

标签: backbone.js laravel laravel-4


【解决方案1】:

这可能是由于 Backbone 路由器无法将 URL 与您的 Backbone 路由匹配造成的。要调试,请将其添加到您的路由中:

'*actions':                 'defaultAction'

然后在路由器中添加:

defaultAction: function(path) {
    console.log('Route "' + path + '" not defined, redirecting to homepage!');
}

您可能会发现路径与您路线中的任何内容都不同。要解决此问题,您需要告诉 Backbone 路径的根。您在激活推送状态时执行此操作。

Backbone.history.start({
    pushState: true,
    root: 'http://mydomain.com/myapplication/'
});

希望这会有所帮助。

【讨论】:

  • 我认为 laravel 4(肯定)是第一个读取请求的,因为它试图在从“/”路由加载主干之前找到匹配的路由。我已经有了你要我做的事情,但是;例如,当我转到 */#login 时,主干将其替换为 */login。当我点击返回/输入重新加载时;我正面临着哎呀!拥有链接的一个很好的理由是让人们分享它们。不只是实现历史事件。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2015-01-26
  • 2015-03-13
相关资源
最近更新 更多