Ember Routes vs Controllers vs Views

时间:2014-07-12 11:04:06

标签: ember.js

我已经阅读了Ember.js网站上的大部分初学者指南,但我仍然对正确放置内容的地方感到困惑。

  1. 路线 - 来自在线研究人员建议在路线中放置路由相关逻辑。这一切都很好,但我唯一能想到的是this.transisionTo()。我在其他地方读到所有与模型相关的操作都应该在路径中,因为这是定义model字段的地方。它是否正确?将actions放在控制器上的路径中有哪些好的用例?

  2. 查看 - 目前,我看不到视图的重点。文档说它处理本机DOM事件但我可能总是使用由控制器处理的{{action}}帮助器。那么在操作方面使用控制器视图的一些好用例是什么?视图的一些好用例通常考虑我将使用组件而不是视图来获取可重用代码。

  3. 控制器 - 在我看来,控制器可以执行View或Route可以执行的任何操作。它可以使用this.transitionToRoute()进行转换,它可以使用this.get('model').save()保存模型,并可以使用{{action}}帮助程序处理操作。所有初学者教程似乎都完全忽略了视图,而是使用控制器。在View或Route上使用Controller有哪些好的用例?

  4. 我想这一切都归结为对所有事物如何挂在一起的理解不足。我无法在网上找到任何有关灰色区域的文档,例如在不同场景下使用{{action}}帮助程序的位置。一些好材料的链接也会有所帮助。

2 个答案:

答案 0 :(得分:16)

更新:所有这些信息都适用于Ember 2.据我所知,Ember 2.0只会使用组件。

Ember.js的各种组成如何组合

模型

模型负责与数据存储交互。数据存储的示例可以是RESTful服务器或Localstorage。

模板

模板负责从其Controller和View可用的数据构建HTML。然后,控制器可以访问模型。

控制器和视图

控制器和视图非常相似,都会对用户生成的事件起作用。 Controller应该对submit之类的语义事件采取行动,而View应该对focusclick等交互事件采取行动。

路由器

Ember有一个路由器。路由器将URL链接到路由。例如users/:user_idusers.show路线或UsersShowRoute

路线

每个路线在激活后,负责将地址解压缩到州。例如,users/:user_id要求用户登录才能查看朋友个人资料。路由确保用户已登录并负责登录状态。

路由从数据存储中提取信息。例如,users/pekhee将从数据存储中获取pekhee用户并将其提供给Controller和View。

路由动态地选择它需要的控制器和视图或它需要多少个。

路由管理应用程序的状态以及应该如何表示该状态。但是,模型负责管理Route和Controllers / Views的应用程序状态,负责管理其表示的细节。

将逻辑保持为相关和尽可能本地:一些注释

  • 如果您的逻辑不关心任何上下文或模型,请将其置于activate路由回调中。
  • 如果一段逻辑只需要知道模型就把它放在路由的afterModel回调中。
  • 如果需要了解Controller的上下文或与资源的语义相互作用,请将其置于控制器中。
  • 如果需要了解View的上下文或与资源的表示进行交互,请将其置于视图中。
  • 如果它需要知道两个上下文或与资源的语义和表示进行交互,首先将事件提供给视图,然后将其升级为控制器。

实施例

当多个控制器使用一个模型时,在链中保留最高可能路径的语义操作,否则将逻辑保留在大多数本地控制器中。

将动画相关代码保存在View中并使用Liquid Fire。

有时每个用户都有很多帖子,每个帖子都有很多评论。尝试让Route返回相关用户。然后向相关用户询问PostsRoute中的帖子,然后尝试在CommentsRoute中询问相关评论。这使逻辑尽可能保持本地化。您评论路线并不需要知道如何检索用户。

答案 1 :(得分:0)

我认为ember2.0意味着放弃视图和控制器,它希望使您的代码更具可重用性,这就是为什么组件更受欢迎。为了将操作放在路由而不是控制器中,我只能看到它可以让新用户更容易理解ember。您不再需要花费大量时间来尝试理解控制器,路由,路由器,视图和模板之间的关系。这是我的猜测。