2012-07-23 134 views
2

我试图使用Backbone.js来处理浏览器历史记录。我没有设置视图/模型,因为我不希望它来处理这个问题,并且可能因为这个原因,我没有得到它的正常工作。使用Backbone.js处理浏览器历史记录

在这一点上我的网页正在改变网址。像:

domain.com/services 
domain.com/products 
domain.com/contact 
domain.com/gallery 
domain.com/gallery/photo1 

问题是:如果我尝试重新加载页面在domain.com/gallery/photo1。我收到错误未捕获的语法错误:意外的代币<

所有其他只有一级永久链接的页面可以在重新加载时正常工作。我在Backbone上丢失了什么?

我只是使用Backbone.Router和Backbone.history。

有没有关于如何使用backbone.js设置网站的简单教程?只是历史的事情?

这里是我的脚本:

var Router; 
var myRouter; 

$(document).ready(function(){ 
    Router = Backbone.Router.extend({ 
     initialize : function(options) { 
      // 
     }, 
     routes: { 
      '' : 'home', 
      '*actions' : 'pages' 
     }, 
     home : function() { 
      this.render('/'); 
     }, 
     pages : function(actions) { 
      this.render(actions); 
     }, 
     render : function(path) { 
      var fullLine = ''; 
      path = (path === '/' || path === '')? '/' : path; 
      console.log('path: ' + path); 
     } 
    }); 

    myRouter = new Router(); 

    Backbone.emulateHTTP = true; 
    Backbone.emulateJSON = true; 
    Backbone.history.start({pushState: true, root: "/backbone_teste/"}); 

    // MENU CLICK 
    $('.menu').children('li').each(function(){ 
     $(this).click(function(){ 
      myRouter.navigate($(this).attr('data-id'), true, true); 
     }); 
    }); 
}); 

感谢您的帮助!

+2

“未捕获的SyntaxError:意外的标记<”,这表明有人试图解释HTML的JSON。你能告诉我们一些代码吗? – 2012-07-23 22:25:51

+0

已编辑帖子。我只是添加了这个选项来仿真HTTP和emulateJSON来查看它是否解决了这个问题。我还没有加载任何东西。如果我将pushState更改为false并尝试访问domain.com/#gallery/photo1,它可以正常工作,但我不想要哈希!谢谢 – 2012-07-24 14:21:50

+0

我在localhost/backbone_teste上运行这个例子,我有一个.htaccess文件mod_rewrite。也许这与我的问题有关。 – 2012-07-24 14:33:56

回答

2

问题就迎刃而解了:

我只是说我的index.php文件在头部分以下代码:

<base href="http://localhost/backbone_teste/" /> 

和它的作品。

无论如何,我想知道为什么发生这种情况,为什么Backbone.js文档没有提到这一点。

,我发现这个链接的解决方案:HTML5 History/pushState URLs, .htaccess and You

感谢

+0

谢谢!这对我也有诀窍。 – 2014-01-12 13:04:12

相关问题