Почему ember-cli использует расширение вместо создания?

В новом приложении Ember вы сначала пишете:

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

В новом приложении ember-cli вы сначала пишете:

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

Почему?

(Во втором случае я не могу прочитать глобальное свойство (App.test) из контроллера. !? )


person Jean    schedule 23.07.2014    source источник
comment
попробуйте прочитать это, чтобы немного узнать о том, как ember-cli импортирует и экспортирует модули iamstef.net/ember -cli/#using-modules и iamstef.net/ember-cli/# соглашения об именах   -  person Grapho    schedule 23.07.2014


Ответы (1)


Этот вопрос на самом деле имеет непосредственное отношение к Ember.Object.

.extend() создает новый класс, который расширяет старый со свойствами уровня класса, определенными в передаваемом хэше.

.create() создать новый экземпляр класса со свойствами уровня объекта, определенными в передаваемом хэше.

Вот почему вы не можете прочитать свойство во втором случае. Если вы хотите это сделать, вам нужно будет сделать:

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

В простом приложении Ember вы можете создать экземпляр объекта App, потому что вы собираетесь использовать его напрямую.

В приложении Ember, сгенерированном ember-cli, вы не создаете экземпляр объекта App, вы просто определяете его класс (используя .extend()). Это потому, что вы не используете его напрямую, так как ember-cli хочет класс, чтобы он мог делать с ним свои собственные вещи, прежде чем он будет внутренне создан.

person bguiz    schedule 24.07.2014