2

在 Ember 文档的“指定路由模型”部分,它说可以通过在路由中实现模型挂钩来分配控制器的模型属性;它还说可以通过实现 setupController 挂钩来更改此行为。这使我得出结论,我可以通过做一个或另一个来分配一个模型。但是当我查看“设置控制器”的 Ember 文档时,示例显示 setupController 钩子需要一个带有两个参数的函数:控制器和模型。文档只是说“模型是路由处理程序的模型。有关更多信息,请参阅指定路由的模型。” 这使我得出结论,我需要执行这两个步骤。

如果我不需要同时执行这两个步骤,那么一个与另一个有什么区别?

4

1 回答 1

1

在大多数情况下,您可以简单地覆盖model并忘记setupController. 有时你根本不需要覆盖任何东西。

的默认行为setupController是将控制器的model属性(别名为content属性)设置为当前路由的模型(作为参数提供)。通常这个参数是model钩子的返回值,除非路由有一个动态段并且通过{{linkTo}}{{render}}或类似的方式访问(即不直接从 url 访问)。在这种情况下,model钩子被绕过并被setupController赋予在转换中提供的任何模型。

如果您的路线有一个动态段,则该model钩子默认情况下会猜测您要查找的内容。给定一个路由路径something/:post_id,默认model挂钩将返回App.Post.find(:post_id)。如果您的路线没有动态段(例如/posts),那么您必须覆盖model以返回您想要的记录。

如果您需要在控制器之外modelcontent之上设置其他属性,那么您应该覆盖setupController. 这将规避默认行为,因此您可以将模型参数分配给控制器的modelorcontent属性(或不分配)。如果您选择,您可以完全忽略模型参数并将控制器的属性设置为您喜欢的任何内容。这种方法的缺点是,由过渡到具有动态段的路由提供的模型不会在控制器上设置。

于 2013-06-12T07:01:42.067 回答