【问题标题】:How to keep the same Backbone template after reloading the browser重新加载浏览器后如何保持相同的 Backbone 模板
【发布时间】:2016-02-13 19:18:22
【问题描述】:

在我的 Backbone 应用程序(Rails 后端)中,我使用 [Handlebars] Javascript 模板 (JST's) 来呈现我的 Backbone 视图。每当我在其中一个 URL 模板上进行浏览器刷新时,它都会跳回根 URL。我希望它在页面刷新后保留在当前模板上。我想做这样的事情......

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 对象中的一个方法。在$(window) 事件处理程序之外无法识别我的fragment 变量。即使我将fragment 设为全局变量,我似乎也找不到将我以前的Backbone.history.fragment 保存在变量中的方法。刷新后全部一扫而光。我知道Backbone.history.loadUrl(Backbone.history.fragment);,但我也无法让它发挥作用。它似乎只在浏览器刷新之前工作。

我必须在我的后端代码的root 路径中更改什么吗?或者有没有办法在页面重新加载时使用 Backbone / JS 来保持当前页面?对此的任何帮助将不胜感激!

【问题讨论】:

  • 我会尝试 Backbone.history.navigate(yourRoute)... 默认情况下应该更改浏览器 url 栏而不重新加载页面。
  • 非常感谢。我使用sessionStorage.setItem('fragment', fragment); 让它在刷新后保留片段。然后我使用了Backbone.history.navigate(fragment); 来确保我访问了正确的 URL。

标签: javascript jquery ruby-on-rails backbone.js handlebars.js


【解决方案1】:

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

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

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

Backbone.history.start({});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-11-08
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多