0

目前正在将 Rails 3.2+ 应用程序转换为使用 Backbone.js 来管理其前端。过渡前,应用程序在 application.html.erb 中呈现了几个布局部分。为了形象化,想想grooveshark——它的左栏和页脚,所有的导航都发生在一个中心内容区域。重点是,左/右列、页脚和页眉中的内容不是静态的。

这就是我认为 application.jst.eco 的样子。每个注释行都是可以呈现另一个模板的地方。

<!-- layouts/header -->

<div class="row-fluid">
  <div id="left-column" class="span3">
    <!-- layouts/left_column -->
  </div>

  <div class="span6">
    <section id="content">
      <header>
        <!-- notices -->
      </header>
      <!-- main content -->
    </section>
  </div>

  <div id="right-column"class="span3">
    <!-- layouts/right_column -->
  </div>
</div>

<!-- layouts/footer -->

我应该如何在 Backbone 中组织模板以复制我的 application.html.erb 结构?我什至在想这个正确的方向吗?

此外,我对 Backbone 应用程序的入口点感到困惑。由于我仍将<%= yield %>在 application.html.erb 中进行调用,并通过 erb 视图预加载主页数据,如果在 Backbone 模板中定义了更大的布局,这一切将如何结合在一起?

4

1 回答 1

1

有多种方法可以做到这一点,但作为一个例子,这就是我的做法。

首先,您实际上根本不必使用您的 rails 部分,除非支持不支持 javascript 的浏览器是一个问题。一个主干.js 应用程序的典型流程是:

  1. 服务器呈现基本布局,包括等<head><body>但带有实际内容的占位符。例如,在我的应用程序中,我有导航栏的占位符和主要内容的占位符。
  2. 您的主干应用程序中的主应用程序类(通常App)创建一个路由器,并且从路由器的initialize方法或从您所在页面的路由处理程序,您可以创建视图并将视图呈现到页面上的占位符中。在我的情况下,由于导航栏永远不会被换出,我在路由器的initialize方法中渲染它,然后在路由处理程序中渲染实际页面。(阅读这篇文章,了解有关如何在页面上实际呈现视图的一些重要提示。)
  3. 如果您想拥有复合视图(例如项目列表,其中每个项目都有自己的视图),那么您将在父级中呈现这些视图并将它们附加到父级的元素(而不是直接到文档) . 这使您的页面元素保持独立,这很重要。
  4. 骨干网启动(通过Backbone.history.start),从那里开始,骨干网接管。

在您的情况下,您可能希望为每个左/右列以及主要内容和标题(通知)创建视图,在后两者(标题和主要内容)的情况下,可能作为复合视图。

希望有帮助,可以提供更多细节,只是问具体问题。ps 我使用主干支持来渲染复合视图,以确保它们在交换时被正确地从 DOM 中删除和解除绑定,以避免内存泄漏等。

于 2012-08-26T10:20:30.297 回答