2016-02-13 50 views
0

在我的Backbone应用程序(Rails后端)中,我使用[Handlebars] JavaScript模板(JST's)来渲染我的Backbone视图。每当我在其中一个URL模板上进行浏览器刷新时,它会跳转回根URL。我希望它在页面刷新后保留在当前模板上。我想要做这样的事情...如何在重新加载浏览器后保留相同的Backbone模板

getPage: function() { 
    $(window).on('beforeunload', function(){ 
    var fragment = Backbone.history.fragment; 
    }); 

    if (fragment === "this_current_template") { 
    return App.getCurrentTemplatePage(); // render it 
    } else if (fragment === "") { 
    return App.getFrontMainPage(); // render it 
    } 
} 

getPage是我的骨干App对象的方法。我的fragment变量不能在$(window)事件处理程序之外识别。我似乎无法找到一种方法来将我以前的Backbone.history.fragment保存在一个变量中,即使我使全局变为fragment。刷新后全部清除。我知道Backbone.history.loadUrl(Backbone.history.fragment);,但我无法让它工作。它似乎只能在浏览器刷新之前工作。

这是我必须改变我的后端代码的root路线吗?或者有没有办法在页面重新加载时使用Backbone/JS来保存当前页面?任何帮助,将不胜感激!

+1

我想尝试Backbone.history.navigate(yourRoute)...默认情况下应该更改浏览器url栏而不重新加载页面。 – billjamesdev

+0

非常感谢。我使用'sessionStorage.setItem('fragment',fragment);'在刷新后保留片段。然后,我使用了'Backbone.history.navigate(fragment);'来确保我找到了正确的URL。 – Matt

回答

0

首先你需要创建一个路由器。据Backbone docs

var Router = Backbone.Router.extend({ 
    routes: { 
    "main": "main" 
    }, 
    main: function() { 
    // your code here 
    } 
}); 

之后,你只需要初始化Backbone.history

Backbone.history.start({}); 

之后自动骨干将尝试找到适合您hashbang合适的路径,并触发相应的动作。在给定示例中,如果您的初始hashbang将为#main,则将执行Router.main操作。

相关问题