为什么在Rails中使用Backbone.js?

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

以下是几个原因:

1) Backbone是专门为Rails构建的,并且可以在rails-on-rails的帮助下轻松集成。 虽然Knockout和Angular的模型 – 视图 – 视图模型(MVVM)模式可以很容易地被合并到Rails应用程序中,但Backbone的MVC体系结构提供了一个组织级别,如果您的应用程序有很多异步页面更新,那么这种组织层次似乎是必要的。 获取此Stack Overflow页面以获取快速示例:

如果您在Rails中构建此问题视图,则您的问题是show.html.erb,question_show.js,show.js.erb以及所有其他js.erb文件,这些文件与异步更新此页面上的内容有关(诸如上/下投票,collections,评论等行为。

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

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

3)骨干(具体)似乎给予了很大的自由度。 它提供了一组约定来帮助组织您的应用程序,但最终它是您正在开发的框架。 Backbone的MVC框架不如Rails单向,但坚固的约定仍然存在。

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

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

来源: Rails上的Backbone.js