Аддоны и помощники Ember-cli

Каков правильный способ размещения ваших вспомогательных файлов, а также куда они должны идти, чтобы распознаватель нашел их в проекте аддона ember-cli?

Я использую ember-cli 0.2.2.

Я создал помощника из проекта аддона с:

ember g helper display-helper

Генератор поместил файл в app/helpers что мне показалось неправильным, я бы подумал, что его надо было поместить в addon хелперы. Я переместил файл в addon/helpers и он выглядит так:

export default Ember.Handlebars.registerBoundHelper('displayHelper', function displayHelper(searchPath) {
  return new Ember.Handlebars.SafeString(get(this, searchPath));
});

Когда я запустил ember test, я получил следующий вывод:

✘ Ошибка: утверждение не выполнено: помощник с именем «displayHelper» не найден.

Единственный способ, которым я могу найти этот помощник, — это добавить импорт, который ссылается на помощника в компоненте, который использует его следующим образом:

import displayHelper from '../helpers/display-helper';

Это не кажется правильным, я думал, что распознаватель найдет это автоматически?

Также, даже если у меня есть ссылка, следующий код заканчивается тем же сообщением об ошибке, что и выше:

import Ember from 'ember';

var get = Ember.get;

function displayHelper(context, searchPath) {
  return new Ember.Handlebars.SafeString(get(context, searchPath));
}

export default Ember.Handlebars.makeBoundHelper(displayHelper);

Подводя итог, я должен иметь эту строку в компоненте, шаблон которого использует помощник:

import displayHelper from '../helpers/display-helper';

И я должен использовать registerBoundHelper, а не makeBoundHelper, как говорится в документах, иначе помощник не может быть найден.


person dagda1    schedule 04.04.2015    source источник


Ответы (1)


Если вы переместите своего помощника из app/helpers в addon/helpers, он будет недоступен в пространстве имен вашего приложения. Чтобы исправить это, добавьте следующий файл:

// app/helpers/display-helper.js

import displayHelper from 'your-addon-name/helpers/display-helper";
export default displayHelper;

(Не копируйте ваше-аддон-имя буквально, используйте имя вашего аддона, которое также является пространством имен вашего аддона.)

Это основано на инструкциях здесь:

http://www.ember-cli.com/#addon-components

Точно так же, как и пример компонента, вы можете поместить свой реальный вспомогательный код в addons/helpers/display-helper, но вам нужно импортировать и реэкспортировать его в свое приложение, чтобы ваш преобразователь мог его найти.

person Gaurav    schedule 05.04.2015
comment
К сожалению, я уже пробовал это, никакие файлы не загружаются автоматически в приложение/папки. 0.2.2 кажется сломанным во многих отношениях. - person dagda1; 05.04.2015
comment
Аналогичная проблема и с 0.2.3. Кроме того, это, а также ember-cli docs говорится, что вместо этого рекомендуется использовать Компоненты. Но я не уверен, зачем вам нужен компонент для определения помощника в Ember-CLI? В качестве контрпримера обратите внимание на структуру этого репозитория, хотя в нем используется более ранняя версия (0.2.0). - person clekstro; 12.04.2015
comment
Хммм... Я не знаю, почему это не работает у вас, ребята, но вы можете попробовать зарегистрировать своих хелперов вручную в инициализаторе, поскольку это необходимо только для хелперов без тире в имени. См. пример обрезки на ember-cli.com/#resolving-handlebars-helpers - person Gaurav; 12.04.2015
comment
Автозагрузка, по-видимому, применяется только к помощникам, сгенерированным или размещенным в приложении. Я попытался использовать инициализатор (взяв пример из этой проблемы), но и это не сработало. Чуть ниже в отрывке, на который вы ссылаетесь, упоминается, что вспомогательный подход не будет работать. - person clekstro; 13.04.2015