11

Rails 可以通过 js 文件和 js.erb 文件更新其表示层,使用像 Backbone.js 这样的框架有哪些具体好处?

4

1 回答 1

33

这里有几个原因:

1) Backbone 是专门为 Rails 构建的,并且在Backbone-on-rails的帮助下很容易集成。虽然 Knockout 和 Angular 的模型-视图-视图模型 (MVVM) 模式可以很容易地并入 Rails 应用程序而不显眼,但如果您的应用程序有大量异步页面更新,Backbone 的 MVC 架构提供了一个似乎确实必要的组织级别。以这个 Stack Overflow 页面为例:

如果您在 Rails 中构建此问题视图,您将拥有问题 show.html.erb、question_show.js、show.js.erb 以及与异步更新此页面上的内容有关的所有其他 js.erb 文件(诸如赞成/反对投票、收藏、评论等操作)。

在 Backbone 中,视图不是像 show.html.erb 这样的标记模板,而是在一个位置包含与该标记资源相关的所有代码。因此,与其在远程 question_show.js 文件中定义所有事件侦听器并在各种 js.erb 文件中处理所有 AJAX 更新,不如将所有与问题显示资源相关的事件侦听和发布都包含在一个地方,即 Backbone 问题显示视图。当然,comment 可以有自己的视图和评论自己的集合,以及我没有提到的其他 MVC 元素。但重点是,Backbone 可以帮助您定义前端资源。

2)选择像 Backbone 这样的 JavaScript 框架有助于减轻服务器的一些负载,因为这些代码实际上不需要在服务器端执行。当可以在客户端的浏览器中完成时,为什么要在服务器上的 html.erb 模板中呈现所有标记元素。针对安全问题,您可以在将数据库对象格式化为 JSON 并将其发送到客户端时将数据库对象属性列入白名单/黑名单。

3)骨干(特别是)似乎提供了很大的自由度。它提供了一组约定来帮助组织您的应用程序,但归根结底,它是您正在开发的框架。Backbone 的 MVC 框架不像 Rails 那样单向,但仍然保持可靠的约定。

4)使用 Backbone(不支持或反对其他框架),pushState 很容易实现到期望其用例的框架中。但是,pushState 在爬虫访问您的内容方面有其缺点,并且需要以爬虫友好的方式合并一些服务器端呈现。不过,很棒的是,您可以在使用 Backbone 开箱即用时获得相同的历史/可降解性;他们的 url 片段允许相同的功能,他们只是有一个额外的 # 在那里。

使用像 Backbone 这样的框架还有很多其他原因,而且看起来确实有很多替代方案,因为一个框架并不适合所有人。但据我所知,如果您从头开始构建应用程序,Backbone 似乎是一个很棒的框架。如果您想将其合并到现有应用程序中,它似乎也非常可行。

资料来源:Rails 上的 Backbone.js

于 2012-08-22T23:45:14.617 回答