2014-12-07 36 views
0

我不知道确切的错误在哪里。Backbone路线不适用于Laravel

我正在做一个单页应用程序,这是背景:即看这条路线“domain.dev/v1/”

  • Laravel服务第一

    1. 我有一个资源控制器Laravel页面/视图“/public/views/layouts/application.blade.php”
    2. 胡须视图存储在“public/views /”下,它们在被骨干路由器调用时同步加载(我修改了“app/config/view.php”文件服务于bakcbone的视图)
    3. 在骨干网中,路由器c处理每个URI更改,甚至pushstate和相应的Mustache视图。一切似乎工作正常,但如果您键入用户的列表或用户的直接URI ...你只能看到服务器返回的JSON,而不是相应的骨干视图,换句话说,我不知道哪些不是做的正确的工作,Laravel路由器或骨干路由器。或者它是一个Laravel配置?

    这是我到目前为止的代码:

    // app/routes.php 
    
    Route::group(['prefix' => 'v1'],function(){ 
    
        Route::resource('users','V1\UsersController'); 
    
        Route::get('/', function() 
        { 
         return View::make('layouts.application')->nest('content', 'app'); 
        }); 
    }); 
    
    
    // app/controllers/V1/UsersController.php 
    
    namespace V1; 
    
    //import classes that are not in this new namespace 
    use BaseController; 
    use User; 
    use View; 
    use Input; 
    use Request; 
    
    class UsersController extends \BaseController { 
    
        public function index() 
        { 
         return $users = User::all(['id','email','name']) ; 
        } 
    
        public function show($id) 
        { 
         $user = User::find($id,['id','email','name']); 
    
         if(is_null($user)){ 
          return array(
           'id' => 0, 
           'email' => 'fake email' 
           ); 
         } 
         return $user; 
        } 
    
    // public/js/namespaces.js 
    
    (function(){ 
    
        window.App = { 
         Models : {}, 
         Collections : {}, 
         Views : {}, 
         Router : {} 
        }; 
    
        window.Templator = function (mustacheView){ 
         return $.ajax({ 
          url: '/views/'+mustacheView, 
          async : false, 
          type: 'GET', 
         }).responseText; 
        }; 
    
        window.Vent = _.extend({},Backbone.Events); 
    
    })(); 
    
    // public/js/backbone/router.js 
    
    App.Router = Backbone.Router.extend({ 
        routes : { 
         '' : 'home', 
         'users' : 'showAll', 
         'users/:id' : 'showUser', 
         'login' : 'showLoginForm' 
        }, 
        home: function(){ 
         Vent.trigger('home:index'); 
        }, 
        showAll : function(){ 
         Vent.trigger('users:showAll'); 
        }, 
        showUser: function (id){ 
         Vent.trigger('users:show',id); 
        }, 
        showLoginForm : function(){ 
         Vent.trigger('login:form'); 
        } 
    }); 
    
    
    // public/js/app.js 
    $(function() { 
    
        $(document).on("click", "a", function(e){ 
         var href = $(this).attr("href"); 
    
         if (href != '#') { 
         e.preventDefault(); 
         Backbone.history.navigate(href,{trigger:true}); 
         } 
        }); 
    
        new App.Views.AllUsers; 
        new App.Views.Index; 
        new App.Views.Login; 
        new App.Router; 
    
        Backbone.history.start({ 
         pushState: true, 
         silent: true, 
         root: '/v1' 
        }); 
    }); 
    

    所以,如果我的导航栏上输入这个URI“domain.dev/v1/users”,显示了JSON和视图的用户列表不显示关联骨干网络。 有什么建议吗?

  • +0

    我对Backbone并不是特别熟悉,但就Laravel代码而言,您正在得到您应该做的。您的控制器操作正在返回一组用户,Laravel自动将其转换为JSON响应。如果你想从Laravel返回一个视图,你应该返回'View :: make('view_name')',但我猜你有一些数据绑定正在从Backbone应用程序的视图中进行,所以你需要处理如果到'/ v1/users'的直接路由返回一个视图而不是一个数组。 – Bogdan 2014-12-07 21:13:56

    +0

    是的,你是对的@Bogdan .Laravel restful API只返回并接收JSON。但我认为这个问题可能是BackBone中的“深层链接”。我现在很困惑,我不知道还有什么地方要检查 – Frankistan 2014-12-08 01:01:39

    回答

    0

    看一看我的答案,我只是在一个类似的问题提供了关于角:Angular and Laravel

    在文本,只是精神上与Backbone取代Angular

    如何从Laravel传递路线主干:

    的基本观点,那就是从Laravel返回为'/'路由也需要有这样的事情都在其<head>之前backbone.js包括:

    <script> 
        var myRoute = "{{ $route }}"; 
    </script> 
    

    此刀片模板创建一个Javascript变量。然后,你宣布你的主干航线后,补充一点:

    Backbone.history.start(); // You should already have this line, so just add the next one 
    App.nav.navigate(myRoute); 
    

    这应该做的伎俩。

    +0

    我认为你的解决方案可以工作@sisou,但是......如何处理传递给服务器呈现的主页面的变量“route”? (在你的例子中 - >“return Redirect:to('/')”)。 – Frankistan 2014-12-08 15:58:24

    +0

    我还编辑了我的答案,以提供从Laravel获取'route'变量到主干的指示。 – sisou 2014-12-08 18:10:28

    +0

    这似乎是完美的,我会尝试和评论你的结果;) – Frankistan 2014-12-10 00:00:22