使用Laravel在初始页面加载时调用Backbone路由

时间:2013-08-14 23:09:03

标签: javascript backbone.js laravel laravel-4

我是Backbone和Laravel的新手,所以这可能是一个简单的问题,但我需要我的Backbone路由器匹配初始页面加载时的URL,例如localhost / search / query我想在没有frag标识符(或#hashtags或其他)的情况下这样做。这给了我两个问题:

  1. 当我使用Backbone.history.start({ pushState: true })时,我从Laravel收到404错误。有没有办法为Laravel中的所有URL定义默认(索引)路由,所以我不必列出我可能使用的每个可能的URL组合?

  2. 当我不使用pushState: true时,我的Backbone路由器工作正常,但前提是我没有直接导航到URL。例如,如果我首先转到localhost,那么localhost / #search / example它可以工作,但是如果我直接转到localhost / #search / example,则不会触发搜索路由。我想这可能是因为我只在文档准备就绪时启动了Backbone.history但我不确定如何做到这一点。无论如何,这里有一些代码:

    //app.js
        window.App = {
    Models: {},
    Collections: {},
    Views: {},
    Router: {}
    };
    
    window.vent = _.extend({}, Backbone.Events);
    
    
    // router.js
    App.Router = Backbone.Router.extend({
    routes: {
        '': 'index',
        'search/:query': 'search'
    },
    index: function() {
        console.log('the index page');
    },
    search: function(query) {
        console.log('the search page: ' + query);
        vent.trigger('router:search', query);
    }
    });
    
    
    // setup.js
    (function() {
    
        App.cats = new App.Cats();
    
        App.appView = new App.AppView();
    
        App.router = new App.Router;
    
        Backbone.history.start({
        pushState: true
        });
    
    })();
    
  3. 提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

您可以使用“* actions”定义默认路线:

http://backbonetutorials.com/what-is-a-router/

   var AppRouter = Backbone.Router.extend({
        routes: {
            "*actions": "defaultRoute" // matches http://example.com/#anything-here
        }
    });

您还可以定义起始根:

 Backbone.history.start({pushState: true, root: "/public/search/"})

您必须将请求重定向到index.php
http://www.elcoderino.com/laravel-redirect-redirects-url-to-index-php/

在公共目录中创建.htaccess文件并添加:

<IfModule mod_rewrite.c>
     RewriteEngine on

     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d

     RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>