如何在我的 Rails 应用程序中导航到 Ember 路由?
How do I navigate to an Ember Route within my Rails application?
我有一个非常复杂的交互式页面作为我正在处理的 Rails 应用程序的一部分,它实际上是一个 SPA
。我想利用 Ember 来做到这一点,这样我就有了更易于管理的代码。我真正需要 Rails 的只是在此页面上来回传送数据。使用 Ember 的另一个原因是我没有所有这些讨厌的 jQuery 用 JS 编写的单行视图模板(我更喜欢使用 CoffeeScript)。
我按照 ember-cli-rails
gem 的自述文件中的说明安装并配置了 Ember-CLI。我为我想使用的应用程序的任何部分创建了一个单独的布局 Ember。我为 Products
设置了一条路线,以包括 Ember JS 和 CSS 资源。我现在可以在我的 Rails 应用程序中看到此路由页面上的 "Welcome to Ember" 消息。
但我无能为力。我试图为这个名为 products
的小 Ember 应用程序创建一个 "About" 部分。目前我看到的问题:
- ember-cli-rails gem 初始化程序不会创建
views
目录。这是为什么?
- 我还没有找到没有内置大量假设的
Ember-CLI
教程。
我的 <ember app>/routes
目录中有一个 about.js.coffeee
,一个在 <ember app>/controllers
目录中,一个在我必须创建的 <ember app>/views
目录中,还有一个 emblem
模板在 <ember app>/templates
目录中。
现在回答一个非常基本的问题。我如何在浏览器中调出这条路线?如果我输入路线:
http://localhost:3000/products
我得到了我的 Ember 页面,这是我应该做的。但是如果我输入:
http://localhost:3000/products/about
然后 Rails 当然会尝试处理该路由。这根本不是我想要的。这是我阅读的教程中缺少的步骤。我总是建议将教程放在外行面前,以便在发布之前找到漏洞。我很乐意做这份工作的志愿者,以便为社区做出贡献。
如何在我的 Rails 应用程序中导航到 Ember 路线?
你不知道。
过去有 ember-rails
可以让您通过 Rails 资产管道设置 ember。
你基本上可以做到这一点,这样你在 rails 中的根路径就足以 html 来启动 ember。这很好,而且很管用。但这是一个非常糟糕的主意。
Ember 现在通过 Ember-CLI 拥有自己的构建过程,因此我们不需要链轮或资产管道来提供 ember 及其依赖项。
Ember 也可以完美地部署静态 html 文件 - 您可以直接从 Apache 或 NGINX 传递请求(例如使用 mod_rewrite)。 SPA 只需要足够的 HTML 来启动 SPA 框架,然后它们获取数据来填充视图。
如果您将 Ember 应用植入 Rails 中,请求将不得不通过 Rack 所有中间件来呈现基本上是静态的 html 页面 - 那是很多不必要的开销。
单独关注。
现代方法是将前端 SPA 和后端分开 API。它们甚至可以由不同的团队开发。将所有内容都放在一个大存储库中既舒适又舒适,您可以推动部署 - 但将关注点分开会产生更好的应用程序。
如果您的前端应用程序不拖沓 Rails,它不仅会加载得更快。如果您的 Rails API 可以放弃与服务资产、会话和视图相关的所有部分,那么它 运行 会快得多。它变成了普通的绿色 JSON 机器,而不是猛烈的庞然大物。
路由在 ember.js
所以加载 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
(如果存在)。
我有一个非常复杂的交互式页面作为我正在处理的 Rails 应用程序的一部分,它实际上是一个 SPA
。我想利用 Ember 来做到这一点,这样我就有了更易于管理的代码。我真正需要 Rails 的只是在此页面上来回传送数据。使用 Ember 的另一个原因是我没有所有这些讨厌的 jQuery 用 JS 编写的单行视图模板(我更喜欢使用 CoffeeScript)。
我按照 ember-cli-rails
gem 的自述文件中的说明安装并配置了 Ember-CLI。我为我想使用的应用程序的任何部分创建了一个单独的布局 Ember。我为 Products
设置了一条路线,以包括 Ember JS 和 CSS 资源。我现在可以在我的 Rails 应用程序中看到此路由页面上的 "Welcome to Ember" 消息。
但我无能为力。我试图为这个名为 products
的小 Ember 应用程序创建一个 "About" 部分。目前我看到的问题:
- ember-cli-rails gem 初始化程序不会创建
views
目录。这是为什么? - 我还没有找到没有内置大量假设的
Ember-CLI
教程。
我的 <ember app>/routes
目录中有一个 about.js.coffeee
,一个在 <ember app>/controllers
目录中,一个在我必须创建的 <ember app>/views
目录中,还有一个 emblem
模板在 <ember app>/templates
目录中。
现在回答一个非常基本的问题。我如何在浏览器中调出这条路线?如果我输入路线:
http://localhost:3000/products
我得到了我的 Ember 页面,这是我应该做的。但是如果我输入:
http://localhost:3000/products/about
然后 Rails 当然会尝试处理该路由。这根本不是我想要的。这是我阅读的教程中缺少的步骤。我总是建议将教程放在外行面前,以便在发布之前找到漏洞。我很乐意做这份工作的志愿者,以便为社区做出贡献。
如何在我的 Rails 应用程序中导航到 Ember 路线?
你不知道。
过去有 ember-rails
可以让您通过 Rails 资产管道设置 ember。
你基本上可以做到这一点,这样你在 rails 中的根路径就足以 html 来启动 ember。这很好,而且很管用。但这是一个非常糟糕的主意。
Ember 现在通过 Ember-CLI 拥有自己的构建过程,因此我们不需要链轮或资产管道来提供 ember 及其依赖项。
Ember 也可以完美地部署静态 html 文件 - 您可以直接从 Apache 或 NGINX 传递请求(例如使用 mod_rewrite)。 SPA 只需要足够的 HTML 来启动 SPA 框架,然后它们获取数据来填充视图。
如果您将 Ember 应用植入 Rails 中,请求将不得不通过 Rack 所有中间件来呈现基本上是静态的 html 页面 - 那是很多不必要的开销。
单独关注。
现代方法是将前端 SPA 和后端分开 API。它们甚至可以由不同的团队开发。将所有内容都放在一个大存储库中既舒适又舒适,您可以推动部署 - 但将关注点分开会产生更好的应用程序。
如果您的前端应用程序不拖沓 Rails,它不仅会加载得更快。如果您的 Rails API 可以放弃与服务资产、会话和视图相关的所有部分,那么它 运行 会快得多。它变成了普通的绿色 JSON 机器,而不是猛烈的庞然大物。
路由在 ember.js
所以加载 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
(如果存在)。