我什么时候应该在 EmberJS 中使用控制器与路由?

When should I use controllers vs routes in EmberJS?

我知道这个问题可能看起来有点重复,但是 other version of this question 已经过时了,有些内容(例如视图)甚至不再是 ember 的一部分。

作为使用 EmberJS 的前端开发人员,我已经实习了大约 4 周。我仍然不明白什么时候最好在控制器上使用路由,反之亦然。在我看来,路由中的每一个动作也可以在控制器中使用。

我最近听说的一件事是 ember 路由应该是 stateless where as controllers should be stateful

控制器和路由的当前状态是什么。什么时候应该用一个代替另一个?

考虑以下示例,以简单的术语和当前上下文来理解控制器(或路由,或任何东西)的状态——假设您有一个包含三个选项卡的页面(如表单);每个选项卡都可以被视为一种状态 - 它会根据状态(或您所在的选项卡)调用不同的组件。现在,如果您出于某种原因碰巧返回并再次点击表单 link,您会看到状态将保持不变。 (如果您在回击时位于选项卡 2 上,则在返回表单时,您仍将位于选项卡 2 上)。

因此,要维护这些状态,控制器是必经之路,因为它们是单例。路线会丢失该信息,并重新开始。所以基本上你的 variables/objects 在控制器中会定义 'state'.

路由操作可以像控制器操作一样轻松使用 - 请参阅 https://github.com/DockYard/ember-route-action-helper。因此,如果您的这条路线的模板只是直接使用模型作为对象,并且您不需要维护 'state',您几乎可以在没有控制器的情况下完成。

但是如果您的模板使用需要操作的变量,您将需要控制器。

希望对您有所帮助!