重新加载浏览器后如何保持相同的Backbone模板

时间:2016-02-13 19:18:22

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

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

<div class="ficha_container">
  <div class="ficha_row">
    <div class="ficha_cell">
      <h1>Title</h1>
      <p>Content.</p> 


    </div>
  </div>
</div>

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);路由中进行更改吗?或者有没有办法在页面重新加载时使用Backbone / JS持久保存当前页面?对此的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

首先,您需要创建一个路由器。根据{{​​3}}:

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

之后你只需要初始化Backbone docs

Backbone.history.start({});

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