2014-03-13 85 views
0

我有同样的问题,就像这里询问Routing problems with Codeigniter and Backbone.js - 那么,有没有现成的例子如何解决这个问题?我如何以及在哪里调整我的代码?我该如何转储Codeigniters View部分,让Backbone像完成建议那样完成MV部分?骨干和Codeigniter - 路由问题

在此先感谢...

[更新] 所以,看Catch-all Controller/Route,在我application->config->routes.php后,我必须补充:

$route['(:any)'] = 'catchall_controller' 

附加到$route['default_controller'] = "main"或取而代之的是?

然后在我的主控制器我必须这样做,或者什么?:

class Main extends CI_Controller { 

    public function index() 
    { 
    $this->uri->segment(n); 
    $this->load->view('home'); 
    } 

} 

最后删除pushState:true在我的骨干应用程序,所以它说:

Backbone.history.start({root: App.ROOT }); 

这是正确的?

+0

您是否在启动Backbone.history时使用'pushState:true'? –

+0

是的,我的main.js文件包含'Backbone.history.start({pushState:true,root:App.ROOT});' – SHT

回答

0

您的问题来自您使用pushState的事实。从文档(http://backbonejs.org/#History):

注意,使用真实的URL需要你的Web服务器能够 正确渲染那些页面,因此后端改变是必需的 好。例如,如果您的路由为/ documents/100,则如果浏览器直接访问该URL ,则您的网络服务器必须能够提供该页面。

那么你的选择基本上是:

  • 停止使用pushState的Backbone.history.start({ root: App.ROOT });
  • 让你的服务器返回 URL您的主干应用程序可以生成一个有效的回应(见 Catch-all Controller/Route) 你”重新遇到问题,因为您的客户端应用程序正在生成您的服务器不知道如何处理的URL => 404错误

另请参见Backbone router: Use hashbangs

+0

好的,有没有一个实际的例子来说明如何实现这个? – SHT

+0

我已经用资源更新了我的答案。 –

+0

我已经更新了我的问题... – SHT