如何在重新加载浏览器后保留相同的Backbone模板
问题描述:
在我的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来保存当前页面?任何帮助,将不胜感激!
答
首先你需要创建一个路由器。据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
操作。
我想尝试Backbone.history.navigate(yourRoute)...默认情况下应该更改浏览器url栏而不重新加载页面。 – billjamesdev
非常感谢。我使用'sessionStorage.setItem('fragment',fragment);'在刷新后保留片段。然后,我使用了'Backbone.history.navigate(fragment);'来确保我找到了正确的URL。 – Matt