Ember Routes vs Controllers vs Views

jax*_*jax 36 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有哪些好的用例?

我想这一切都归结为对一切如何挂起的理解不足.我无法在线或在灰色区域明确的文档中找到任何内容,例如在{{action}}不同场景中使用帮助程序的位置.一些好材料的链接也会有所帮助.

Poo*_*avi 17

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

Ember.js的各种组件如何组合在一起

模型

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

模板

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

控制器和视图

控制器和视图非常相似,都对用户生成的事件起作用.Controller应该对语义事件采取行动,submit并且View应该对诸如focus或之类的交互事件采取行动click.

路由器

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

路线

每个Route,当被激活时,负责将URL解包到一个州.例如,users/:user_id要求用户登录才能查看朋友个人资料.路由确保用户已登录并负责登录状态.

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

Route会动态选择Controller需要的内容或需要的内容.

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

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

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

例子

当多个控制器与一个模型一起工作时,在链中的最高可能路由上保留语义操作,否则将逻辑保留在大多数本地控制器中.

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

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