Как я могу указать альтернативный каталог для моих шаблонов HandlebarsJS с драгоценным камнем ember-rails?

У меня есть приложение Rails, и я использую Ember для интерфейса. Я хотел бы переместить файлы, связанные с Ember, на один уровень ниже в структуре каталогов, но когда я это делаю, шаблоны больше не отображаются.

В простой, ванильной, рабочей версии приложения моя структура каталогов выглядит так:

./app/
  assets/
    javascripts
      application.js
      ember-app.js
      routes.js
      store.js
      models/
      controllers/
      routes/
      templates/
      views/

с: application.js

//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require ember-app
App = Ember.Application.create();

и: ember-app.js

//= require ./store
//= require_tree ./models
//= require_tree ./controllers
//= require_tree ./views
//= require_tree ./helpers
//= require_tree ./templates
//= require ./router
//= require_tree ./routes

Все работает нормально. Однако я хотел бы переместить файл ember-app и весь код ember javascript на один уровень ниже, и когда я это сделаю, шаблоны не отображаются. (Часть приложения использует Ember, но не все приложение, и я пытаюсь настроить два отдельных пути через конвейер ресурсов.)

Желаемая структура:

./app/
  assets/
    javascripts
      application.js
      embro/
        ember-app.js
        routes.js
        store.js
        models/
        controllers/
        routes/
        templates/
        views/

с: application.js (пересмотрено: «требовать приложение ember-app» становится «требовать приложение embro/ember-app»)

//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require embro/ember-app
App = Ember.Application.create();

(ember-app.js не пересматривался.)

Как я уже сказал, после перемещения содержимое шаблона не отображается на экране. Никаких ошибок ни на экране, ни в консоли, просто пустое ember-приложение.

Когда я просматриваю Ember.TEMPLATES в консоли, в списке перечислены все ожидаемые шаблоны. Кроме того, если я поместил нужный контент в шаблоны x-handlebars в соответствующем представлении rails, контент успешно отобразится, как это было с исходной структурой каталогов.

Например, в apps/views/welcome/index.html....

<script type="text/x-handlebars" data-template-name="application">
  <h1>hello</h1>
  {{ outlet }}
</script>

<script type="text/x-handlebars" data-template-name="index">
  <h1>this is the index</h1>
</script>

... и мы готовы снова идти.

но если я оставлю представление рельсов пустым, как я сделал с исходной структурой, это не пойдет.

Интересно, возможно, гем ember-rails требует, чтобы шаблоны рулей присутствовали в app/assets/javascripts/templates, и есть ли способ переопределить это. В документации упоминается добавление параметра templates_root в блок конфигурации приложения, и мне интересно, является ли это ключом. Я немного поиграл, пока не повезло.

Любые идеи?


ОБНОВИТЬ:

Боюсь, мне не повезло с параметром templates_root. В качестве эксперимента я попытался создать новое простое приложение для рельсов и использовать генератор начальной загрузки ember-rails, чтобы запустить его. Все хорошо, но если я попытаюсь просто изменить имя папки шаблонов (например, app/assets/javascripts/templates -> app/assets/javascripts/temple) с соответствующими изменениями в звездочках включает и файлы конфигурации, я получаю те же результаты.

Есть ли шанс, что опция templates_root каким-то образом не работает?

Я использую Ruby 1.9.3, Rails 3.2.11, ember-rails 0.10.0.

Любые указатели на то, где я должен искать в исходном коде ember/ember-rails/handlebars? Стали ковыряться.

Благодарность!


person doublea    schedule 19.02.2013    source источник
comment
Даже если templates_root работает, это все равно ограничивает вас только одним пространством имен. Я хотел бы сделать то же самое, но также иметь что-то вроде раздела admin.js и admin/templates.   -  person ootoovak    schedule 07.04.2013


Ответы (1)


Вы правы, что вам нужно установить templates_root. Попробуйте добавить

config.handlebars.templates_root = 'embro/templates'

в блок конфигурации в application.rb, или

RailsApp::Application.config.handlebars.templates_root = 'embro/templates/'

на новый инициализатор, где RailsApp — это имя вашего приложения.

Изменить:

Я смог воспроизвести описанное вами поведение с templates_root. Исправление для меня состояло в том, чтобы удалить папку /tmp моего приложения и перезапустить рельсы. После этого шаблоны назывались правильно.

Изменить:

Точнее нужно очистить кеш звездочек на /tmp/cache/assets после изменения templates_root.

Изменить:

Как упоминалось в комментариях ниже, простой rake tmp:cache:clear должен решить проблему.

person ahmacleod    schedule 19.02.2013
comment
Леген....подожди....дари. Я уже несколько часов бьюсь головой об стену. И все, что мне нужно было сделать, это удалить проклятый каталог /tmp. Спасибо - person Aaron Chambers; 27.02.2013
comment
Есть идеи об использовании описанной выше техники для пространства имен приложений Ember? stackoverflow.com/questions/15859552/ - person ootoovak; 09.04.2013
comment
Спасибо, это стало действительно раздражать. Я даже читал ту часть об очистке кеша активов в файле readme ember-rails, но просмотрел его, я думаю... - person Ryan; 26.06.2013
comment
Чтобы очистить tmp, в rails есть задача rake rake tmp:clear. - person lillq; 04.02.2014