嵌套路由中的Ember控制器

Ember controllers in nested routes

本文关键字:Ember 控制器 路由 嵌套      更新时间:2023-09-26

我对ember控制器的工作方式感到非常困惑。

我现在从ember和ember-cli开始,我想了解更多关于控制器如何工作的信息。

如果我在事件资源中有一个名为new的嵌套路由,我应该有:

models/event
routes/events/new
templates/events/new

控制器呢??我只使用一个简单的控制器,还是应该使用控制器/事件/新控制器?

没有任何生成器命令可以为我创建所有资源吗?我需要一个接一个地打电话吗?

谢谢。

控制器呢??我只使用一个简单的控制器,还是应该使用控制器/事件/新控制器?

这主要取决于你的控制器需要做什么。如果这只是控制器无论如何都要做的重要事情,Ember会在引擎盖下为你创建控制器,并自动将动作冒泡到它的父控制器。

没有比Ember指南更好的地方来阅读控制器的用途:

最简单的定义是:

控制器允许您用显示逻辑来装饰模型。

这意味着您基本上将它们用作路线和模板之间的主要通信层。从本质上讲,你的模型来自你的路线,通过你的控制器,进入你的模板。模板中发生的操作先到达控制器,然后到达路由。因此,控制器本质上是中间层,您可以在其中使用您的模型(和其他数据)来控制向用户显示的内容,控件用户可以做什么,控件他们可以在哪里导航等。


但是,要注意未来的计划:

控制器非常像组件,以至于在Ember的未来版本中,控制器将完全被组件取代。目前,组件无法路由到,但当这种情况发生变化时,建议用组件替换所有控制器。

这意味着,现在,控制器的责任仅限于两件事:

  1. 基于当前路由维护应用程序状态
  2. 从组件移动到路线时,处理或冒泡通过控制器层的用户操作

模板上触发的所有操作首先在控制器上查找,如果在控制器中未处理或冒泡(通过返回true),则在路由上查找。

因此,/eventsevents/new路由的控制器根本没有必要,只有当您想立即(在较小的范围内)处理这些路由上发生的事情,而不是允许所有事情都冒泡到ApplicationController时。


没有任何生成器命令可以为我创建所有资源吗?我需要一个接一个地打电话吗?

是的。因为,如果你没有专门创建一个控制器,Ember只会在幕后为你生成一个。你需要指定你想自己处理事情的地方。

你应该访问我上面给出的链接(或者再次出现在这里)到Ember指南,那里有更多更详细的例子。