我有一个非常复杂的交互式页面,作为我正在处理的Rails应用程序的一部分,而且它真的是SPA
。我想利用Ember这样做,所以我有更多可管理的代码。我真正需要的Rails就是在这个页面上来回传送数据。使用Ember的另一个原因是我没有用JS编写的所有这些讨厌的jQuery单线视图模板(我更喜欢使用CoffeeScript)。
我按照ember-cli-rails
gem的自述文件中的说明安装并配置了Ember-CLI。我已经为我想要使用Ember的应用程序的任何部分创建了一个单独的布局。我有Products
的路由设置包括Ember JS和CSS资源。我现在可以看到"欢迎来到Ember"我的Rails应用程序中此路由的页面上的消息。
但我无能为力。我试图创建一个"关于"这个小Ember应用程序的部分称为products
。到目前为止我看到的问题:
views
目录。那是为什么?Ember-CLI
教程。我的about.js.coffeee
目录中有一个<ember app>/routes
,<ember app>/controllers
目录中有{{}},我必须创建的<ember app>/views
目录中有一个emblem
<ember app>/templates
目录中的模板。
现在提出一个非常基本的问题。如何在浏览器中显示此路线?如果我输入路线:
http://localhost:3000/products
我得到了我的Ember页面,就像我应该的那样。但是,如果我把:
http://localhost:3000/products/about
当然,Rails会尝试处理这条路线。这根本不是我想要的。这是我读过的教程中缺少的步骤。我总是建议将一个教程放在外行人面前,以便在发布之前找到漏洞。我很乐意为这份工作做志愿者,为社区提供一些东西。
如何在我的Rails应用程序中导航到Ember路线?
答案 0 :(得分:1)
回到ember-rails
的日子里,你可以通过Rails资产管道设置ember。
你基本上可以这样做,以便你在rails中的根路径可以渲染足够的html来kickstart ember。这很好,它只是工作。但这是一个非常糟糕的主意。
Ember现在通过Ember-CLI拥有自己的构建过程,因此我们不需要Sprockets或资产管道来提供ember及其依赖项。
Ember也可以使用静态html文件完美地部署 - 您可以直接从Apache或NGINX传递请求(例如使用mod_rewrite)。 SPA只需要足够的HTML来使SPA框架滚动,然后他们获取数据以填充视图。
如果你将你的Ember应用程序嵌入到Rails中,请求必须通过Rack all和所有中间件来呈现基本上是一个静态的html页面 - 这是很多不必要的开销。
现代方法是将前端SPA和后端API分开。它们甚至可以由不同的团队开发。将所有内容放在一个大型存储库中是非常好的和舒适的,您可以推动部署 - 但分离关注点会产生更好的应用程序。
如果没有通过Rails敲击,您的前端应用程序不仅会加载更快。如果Rails API可以放弃与服务资产,会话和视图相关的所有部分,那么它的运行速度会快得多。它变成了一个平均的绿色JSON机器,而不是一个巨大的庞然大物。
因此加载ember server
并获取Ember Inspector plugin。您的路线应为locahost:4200/about
ember开发服务器将确保localhost:4200
的每个请求都会呈现index.html页面。
如果您在禁用javascript的情况下尝试此操作,您会发现locahost:4200
上locahost:4200/foo/bar/baz
上的任何路径都会呈现相同的html。
但通常Ember将解析请求URL并将其传递给您的路由处理程序。
这是在ember.js中声明路由处理程序的方法:
// app/router.js
Router.map(function() {
this.route('about', { path: '/about' });
});
所以当你locahost:4200/about
时。
Ember会渲染templates/about.hbs
。截至Ember 2.0的观点已经结束。相反,你有模板和组件(想想Rails中的部分)。
如果存在,Ember也会加载app/routes/about.js
。