2013-06-18 3 views
6

Ember & Rails newb здесь с серьезным вопросом обо всех.Эмбер-рельсы проектируются как монтируемый двигатель?

Я строю проект, который использует установку Эмбер-рельсы в качестве примера здесь: https://github.com/dgeb/ember_data_example

Однако, чтобы сделать вещи еще более сложным, проект призван быть упакована как драгоценный камень, для включения в более крупное приложение. С этой целью я создал монтируемый движок, содержащий фиктивный проект для тестирования.

Проблема заключается в том, что эрбер-рельсы и, в частности, ручки не могут найти шаблоны в их предполагаемом месте. Это предотвращает правильную работу многих функций.

С точки зрения перемещения каталога рули шаблона, я нашел решение здесь: How can I specify an alternative directory for my HandlebarsJS templates with the ember-rails gem?

В заключение говорится, мы можем указать путь к шаблонам в application.rb, установив значение config.handlebars.templates_root

Тем не менее, я думаю, что это приведет к конфликту еще один двигатель ember-rails необходимо загрузить в более крупное приложение .. и для этого потребуется его настройка конфигурации.

Есть ли у кого-нибудь опыт работы с этими настройками, и есть ли способ сделать приложение с ember-приложениями с именами красивыми в более широком контексте?

Кстати, это рельсы 4, работающие по последним рельсам на рубине 1.9.2.

ответ

7

После этого много исследований, кажется, что Эмбер поддерживает переопределение по умолчанию Резольвер: http://emberjs.com/api/classes/Ember.DefaultResolver.html

Вы можете указать его искать шаблоны в вашем Namespaced приложения, следуя инструкциям здесь: https://github.com/emberjs/ember.js/pull/2354

В сущность, распознаватель может быть добавлена ​​в ваш Ember.Application.create(): (цитата @lukemelia в запросе вышеупомянутого тягового)

App1 = Ember.Application.create({ 
    resolver: Ember.DefaultResolver.extend({ 
     resolveTemplate: function(parsedName) { 
      parsedName.fullNameWithoutType = "app1/" + parsedName.fullNameWithoutType; 
      return this._super(parsedName); 
     } 
    }) 
}); 

Это, кажется, быть частью Наба er rc5 на момент написания.

1

Я только что создал приложение ember внутри движка рельсов, и у меня были те же проблемы, что и вы, получив поддержку рулей. Я не мог заставить ember-rails работать внутри двигателя, поэтому я посмотрел на источник ember-rails, и я закончил тем, что просто зарегистрировал руль с наклоном в своем двигателе напрямую. Внутри ember-rails есть несколько конфигураций, чтобы изменить путь корневого шаблона: handlebars.templates_root. Однако у меня не было успеха в том, чтобы работать внутри рельсового двигателя.

https://github.com/andrewmp1/spree_outlet

я до сих пор на самом деле не grokked, как я хотел бы сделать тесты интеграции ж/фиктивного приложения. Но его приближение.

0

Это old ember app and also a rails engine. Он использует ember-rails gem на основе записи gemfile. Вы можете посмотреть его. Смотрите, что он установлен в приложении для рельсов здесь: ember-cart-example. Кроме того, здесь находится online demo of the mounted rails engine inside the rails app.

+1

Похоже, они вручную определяя каждый вид, который именно ситуации вы хотите избежать: т.е. TemplateName: ' ember_cart/templates/carts/mini_cart_list ' –

+0

Да, вы правы. – brg

+0

@alex сделал код, который вы вставили, разрешает его для вас. Если бы это было так, вы могли бы принять свой собственный ответ, чтобы в будущем любой, кого Google приносит сюда, будет знать, что сработало. – brg

0

Существует еще одно решение для этого: он не очень эффективен, но он прост, и он будет работать для этого случая (ember как двигатель внутри приложения rails). Начните с создания инициализатора в вашем движке. В директории конфигурации двигателя нет директории инициализаторов, но вы можете создать один, и инициализаторы, размещенные в нем, будут работать.

# path_to_engine/config/initializers/ember.rb 
YourEngine::Engine.config.handlebars.templates_root = "your_path/templates" 

Любая другая конфигурация уголек конкретных связанных с двигателем может быть также размещена здесь

Смежные вопросы