英文原文:http://emberjs.com/guides/routing/generated-objects/

正如在定义路由中所说的,无论何时,只要你定义了一个新的路由,Ember.js都会试着根据命名惯例寻找相对应的路由,控制器,视图还有模板类。一旦有任何一个对象找不到,那么在内存中,相对应的对象将会被生成。

生成的路由

假设你有下列路由:

  1. App.Router.map(function() {
  2. this.resource('posts');
  3. });

当你导航到/posts时,Ember.js会寻找App.PostsRoute。如果找不到,它会自动地为你生成App.PostsRoute

自定义生成的路由

你可以让你所有生成的路由都扩展自一个自定义的路由。如果你定义了App.Route,所有生成的路由都将会是这个路由的实例。

生成的控制器

如果你导航到posts路由,Ember.js会寻找名为App.PostsController的控制器。如果你没有定义它,他会被自动生成。

Emeber.js可以生成三种类型的控制器: Ember.ObjectControllerEmber.ArrayController, 和 Ember.Controller

Ember.js如何选择生成的控制器类型取决于路由中你的model钩子:

  • 如果返回一个对象(例如单个记录),生成一个ObjectController
  • 如果返回一个数组,生成一个ArrayController
  • 如果不返回任何东西,那么生成一个Ember.Controller的实例。
自定义生成的控制器

如果你想要自定义生成的控制器,你可以定义你自己的App.ControllerApp.ObjectControllerApp.ArrayController。生成的控制器会 扩展自它们其中一个(取决于上面的条件)。

生成的视图和模板

一个路由也会跟对应视图和模板匹配。如果你没有定义对应的视图,那么系统会为你自动地生成一个视图。

一个生成的模板是空的。 如果它是个资源模板,基本上它像一个出口(outlet)一样,以便嵌套的路由可以无缝的插入。 这个等同于:

  1. {{outlet}}