将Rails 3.2应用程序移植到Ember.js的最佳方法是什么?

时间:2013-11-04 16:41:22

标签: ember.js

我有一个相当简单的Rails 3.2应用程序部署到Heroku,我想将它移植到Ember中以减少开销并简化应用程序,然后再继续构建它。任何人都可以提供有关如何最好地处理此问题的一般指导,以保持我现有的Postgres用户数据的完整性吗?

我对Ember很新,刚刚开始,但我想开始专注于解决这个问题,然后才能进一步发展。

FWIW,我隐约知道ember-rails(https://github.com/emberjs/ember-rails),但我目前的直觉是我想完全离开Rails以保持应用程序的精益。随意评论为什么我错了。 :)

1 个答案:

答案 0 :(得分:1)

我们有一个带有jQuery前端的Rails 4应用程序,我们正在慢慢采用Ember。这可能是一个没有正确答案的开放式问题,所以我只提供一些指导。

首先,我首先要说Ember和Rails解决了不同的问题。 Ember不是Rails的替代品,而是更大系统的一部分,其中Rails是一个组件,Ember是另一个组件,就像你的数据库是另一个组件。也就是说,使用Ember简化了并且可能无需在Rails中执行某些部分,因此存在一些重叠。如果你要删除Rails,你可能不得不用等效的东西替换它。

现在有一些想法或方法:

  • Side App / Page。找到一个新的小功能区域,可以与您的主应用程序分开,可以使用Ember端到端完成。例如,在电子商务网站上查看您的订单历史记录。单独做一些事情你可以开始获得一些好处,而无需重新编写所有现有功能或冒险破坏某些东西。您也可以从头开始,而不必担心遗留代码。
  • 重写一切。显然缺点是时间在这里。您可以从复制生成的HTML开始,将其移动到Handlebars并将其动态部分更改为绑定({{name}})。计划您的模型并使用夹具使其全部正常工作。创建一些控制器来添加流,最后通过调用新的Rails API来替换fixture。
  • Page的一部分。这个很棘手,因为Ember有点喜欢拥有整个页面,但它可能是最好的方法,因为重写需要很长时间,并且可能没有具有足够价值的Side App。如果这样做,则必须在Ember中禁用历史记录,将rootElement设置为您正在刷新的页面部分。如果此部分与应用程序的其他部分之间存在交互,则可能需要使Ember生成的标记与页面中的旧版javascript代码兼容(例如,维护用于行为的数据属性)。

此外,如果您使用TurboLinks并且在使用Ember之前无法禁用它,则必须确保在turbolink的页面生命周期中正确加载ember。见TurboLinksHackForEmber