【发布时间】:2015-02-05 11:29:56
【问题描述】:
我不知道错误在哪里。
我正在做一个单页应用程序,这是上下文:
- 我在 Laravel 中有一个资源控制器来监视这条路由“domain.dev/v1/”
- Laravel 提供第一页/视图“/public/views/layouts/application.blade.php”
- Mustache 视图存储在“public/views/”下,并在被主干路由器调用时同步加载(我已修改“app/config/view.php”文件以提供来自 bakcbone 的视图)
- 在骨干网中,路由器控制每个 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 应用程序的视图的数据绑定,所以如果直接路由到 @987654323,你需要处理它@ 返回一个视图而不是一个数组。 -
是的,你是对的@Bogdan。Laravel RESTful API 只返回和接收 JSON。但我认为问题可能出在 BackBone 中的“深度链接”。我现在真的很困惑,我不知道还有哪里可以检查
标签: javascript php backbone.js laravel