像YUIDocs这样的文档工具允许您在注释块中使用@class
标记来识别和描述类(对象类)。每个已识别的类需要@static
或@constructor
标记,定义如下:
-
@constructor
-表示该类是可实例化的(创建的) -
@static
-指示您不应该实例化类新的。你可以静态调用所有类的方法。
在Ember中,你经常使用extend()
创建子类。据我所知,这并没有创建一个类的新实例。然而,许多这样的定义(例如路由的控制器)是单例的,即使你使用extend()
来定义它们。
@constructor
vs @static
?这样的例子有:
- 初始化
- 路由器 <
- 适配器/gh>
- 序列化器 <
- 转换/gh><
- 路线/gh><
- 商店/gh>
- <
- 控制器/gh>
- <
- 组件/gh>
- mixin
我在这里没有包括Handlebars helper,因为我相信它们实际上是方法,而不是类,但如果我错了,我会纠正这个问题。
- 初始化器-在Ember内部的静态实例上调用方法。
- 路由器-静态实例(虽然技术上它是创建的)
- 适配器- @constructor
- 序列化器- @constructor
- 转换- @constructor,假设你在谈论DS。变换
- Routes - @constructor
- Store(这是Ember Data,他们初始化一个实例并将其连接到容器中)
- Models - @constructor如果我们谈论的是DS。模型中,
- 控制器- @constructor
- 适配器- @constructor
- Views - @constructor
- Components - @constructor
- Mixins - @constructorish, Ember可以创建Mixin,但不能创建实例。而且你不能使用extend来生成不同类型的mixins。
路由是类定义。当您使用extend时,您并没有创建一个单例,您只是定义了一个Ember可以使用的类。如果ember需要它,它将通过命名模式知道,并尝试使用您定义的类创建它。同样的模式在整个烬中使用。单例模式是默认模式,只有少数例外,比如itemController
,或者当你在模板中使用render
时,我相信还有很多其他的模式。