为什么ember-cli使用extend而不是create?

Jea*_*ean 7 javascript ember.js ember-cli

在您首先编写的新ember应用程序中:

var App = Ember.Application.create({
    test: 'foo',
    ...
});
Run Code Online (Sandbox Code Playgroud)

在您首先编写的新ember-cli应用程序中:

var App = Ember.Application.extend({
    test: 'foo',
    ...
});
Run Code Online (Sandbox Code Playgroud)

为什么?

(在第二种情况下,我无法从控制器读取全局属性(App.test).!?)

bgu*_*uiz 6

这个问题实际上与很多有关Ember.Object.

.extend()创建一个扩展旧类的新类,在传入的哈希中定义类级属性.

.create()创建该类的新实例,并在传入的哈希中定义对象级属性.

这就是为什么你不能在第二种情况下阅读该属性.如果你想这样做,你需要做:

var App = Ember.Application.extend({});
App.test = 'foo';
Run Code Online (Sandbox Code Playgroud)

在简单的Ember应用程序中,您可以创建App对象的实例,因为您将直接使用它.

在ember-cli生成的Ember应用程序中,您不创建App对象的实例,只需定义其类(使用.extend()).这是因为你没有直接使用它,因为ember-cli想要这个类,所以它可以在内部实例化之前对它做自己的事情.