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

时间:2014-07-23 15:27:21

标签: javascript ember.js ember-cli

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

var App = Ember.Application.create({
    test: 'foo',
    ...
});

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

var App = Ember.Application.extend({
    test: 'foo',
    ...
});

为什么?

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

1 个答案:

答案 0 :(得分:6)

这个问题实际上与Ember.Object有很大关系。

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

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

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

var App = Ember.Application.extend({});
App.test = 'foo';

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

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