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

anx*_*ety 11 ajax jquery ruby-on-rails backbone.js

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

anx*_*ety 33

以下是几个原因:

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文件,这些文件与异步更新此页面上的内容有关(诸如上/下投票,收藏,评论等行为.

在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片段允许相同的功能,他们只有一个额外的#在那里.

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

来源:Rails上的Backbone.js