我们有一个带有 jQuery 前端的 Rails 4 应用程序,我们正在慢慢采用 Ember。这可能是一个没有一个正确答案的开放式问题,所以我将提供一些指导。
首先,我将首先说 Ember 和 Rails 解决不同的问题。Ember 不是 Rails 的替代品,而是更大系统的一部分,Rails 是一个组件,Ember 是另一个组件,就像您的数据库是另一部分一样。也就是说,使用 Ember 简化并且可能消除了在 Rails 中执行某些部分的需要,因此存在一些重叠。如果您要删除 Rails,您可能必须用等效的东西替换它。
现在有一些想法或方法:
- 侧应用程序/页面。找到一个可以与您的主应用程序分开的新的小型功能区域,可以使用 Ember 端到端完成。例如在电子商务网站上,查看您的订单历史记录。做一些单独的事情,您可以开始获得一些好处,而无需重新编写所有现有功能或冒险破坏某些东西。您也可以从头开始,而不必担心遗留代码。
- 全部重写。显然缺点是时间在这里。您可以从复制生成的 HTML 开始,将其移动到 Handlebars 并将其动态部分更改为绑定 (
{{name}}
)。计划您的模型并使用固定装置使其全部正常工作。创建一些控制器来添加流程,最后用对新 Rails API 的调用替换固定装置。
- 页面的一部分。这个有点棘手,因为 Ember 有点喜欢拥有整个页面,但这可能是最好的方式,因为重写需要很长时间,并且可能没有足够价值的 Side App 来处理。如果这样做,您将不得不禁用 Ember 中的历史记录,将 rootElement 设置为您正在刷新的页面部分。如果此部分与应用程序的其他部分之间存在交互,您可能需要使 Ember 生成的标记与页面中的遗留 javascript 代码兼容(例如,维护用于行为的数据属性)。
此外,如果您正在使用 TurboLinks 并且在使用 Ember 之前无法禁用它,则必须确保 ember 在 turbolink 的页面生命周期中正确加载。请参阅TurboLinksHackForEmber