我不知道確切的錯誤在哪裏。Backbone路線不適用於Laravel
我正在做一個單頁應用程序,這是背景:即看這條路線「domain.dev/v1/」
- 我有一個資源控制器Laravel頁面/視圖「/public/views/layouts/application.blade.php」
- 鬍鬚視圖存儲在「public/views /」下,它們在被骨幹路由器調用時同步加載(我修改了「app/config/view.php」文件服務於bakcbone的視圖)
- 在骨幹網中,路由器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和視圖的用戶列表不顯示關聯骨幹網絡。 有什麼建議嗎?
我對Backbone並不是特別熟悉,但就Laravel代碼而言,您正在得到您應該做的。您的控制器操作正在返回一組用戶,Laravel自動將其轉換爲JSON響應。如果你想從Laravel返回一個視圖,你應該返回'View :: make('view_name')',但我猜你有一些數據綁定正在從Backbone應用程序的視圖中進行,所以你需要處理如果到'/ v1/users'的直接路由返回一個視圖而不是一個數組。 – Bogdan 2014-12-07 21:13:56
是的,你是對的@Bogdan .Laravel restful API只返回並接收JSON。但我認爲這個問題可能是BackBone中的「深層鏈接」。我現在很困惑,我不知道還有什麼地方要檢查 – Frankistan 2014-12-08 01:01:39