Update: Not所有这些信息对于 Ember 2 都是正确的。据我所知,Ember 2.0 将仅使用组件。
Ember.js 的各个组件如何组合在一起
Model
模型负责与数据存储交互。数据存储的示例可以是 RESTful 服务器或本地存储。
Template
模板负责根据其控制器和视图可用的数据构建 HTML。控制器又可以访问模型。
控制器和视图
控制器和视图非常相似,都作用于用户生成的事件。控制器应该对语义事件采取行动,例如submit
视图应该对交互事件采取行动,例如focus
or click
.
Router
Ember 有一个路由器。路由器将 url 链接到路由。例如users/:user_id
to users.show
路线或UsersShowRoute
.
Route
每个路由在激活时都会负责将 url 解包到一个状态。例如users/:user_id
要求用户登录才能查看朋友的个人资料。路由确保用户已登录并管理登录状态。
路由从数据存储中获取信息。例如users/pekhee
将获取pekhee
用户从数据存储并将其提供给控制器和视图。
路由动态地选择它需要什么控制器和视图或者它需要多少个控制器和视图。
路由管理应用程序的状态以及如何表示该状态。然而,模型负责管理路由应用程序的状态,控制器/视图负责管理其表示的具体细节。
保持逻辑尽可能相关和本地化:一些注释
- 如果您的逻辑不关心任何上下文或模型,请将其放入
activate
路由的回调。
- 如果一段逻辑只需要知道模型就把它放进去
afterModel
路由的回调。
- 如果它需要了解控制器的上下文或与资源的语义进行交互,请将其放入控制器中。
- 如果它需要了解视图的上下文或与资源的表示进行交互,请将其放入视图中。
- 如果它需要了解两个上下文或与资源的语义和表示进行交互,请首先将事件提供给视图,然后将其升级到控制器。
Examples
当多个控制器与一个模型一起工作时,请将语义操作保留在链中最高可能的路由上,否则将逻辑保留在大多数本地控制器中。
将动画相关代码保留在 View 中并使用 Liquid Fire。
有时每个用户都有很多帖子,每个帖子都有很多评论。尝试让路由返回相关用户。然后向相关用户询问帖子PostsRoute
然后尝试在以下位置征求相关意见CommentsRoute
。这使逻辑尽可能本地化。您的评论路由不需要知道您如何检索用户。