Ember-rails项目是一个可安装的发动机?

时间:2013-06-18 13:17:37

标签: ruby-on-rails ember.js handlebars.js

Ember&这里有一个关于两者的严肃问题的新手。

我正在构建一个利用ember-rails设置的项目,如下所示:https://github.com/dgeb/ember_data_example

然而,为了使事情变得更加复杂,该项目旨在打包为一个宝石,以包含在更大的应用程序中。为此,我创建了一个可安装的引擎,其中包含一个用于测试的虚拟项目。

问题是,ember-rails,特别是把手无法在预定位置找到模板。这可以防止许多功能正常工作。

在移动把手模板目录方面,我在这里找到了一个解决方案:How can I specify an alternative directory for my HandlebarsJS templates with the ember-rails gem?

总结它说明我们可以通过设置config.handlebars.templates_root

的值来指定application.rb中模板的路径

但是,我认为如果另一个 ember-rails引擎需要加载到更大的应用程序中,这将导致冲突..并且需要自己的配置设置。

有没有人有这些设置的经验,有没有办法让命名空间的ember应用程序在更大的上下文中发挥出色?

顺便说一句,这是在ruby 1.9.2上运行最新ember-rails的rails 4。

4 个答案:

答案 0 :(得分:7)

经过大量研究后,似乎Ember支持覆盖默认解析器:http://emberjs.com/api/classes/Ember.DefaultResolver.html

您可以按照此处的说明指示它在命名空间的应用程序中查找模板: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);
        }
    })
});

在撰写本文时,这似乎是ember rc5的一部分。

答案 1 :(得分:1)

我刚刚在rails引擎中创建了一个ember应用程序,我遇到了与获得把手支持相同的问题。我无法让ember-rails在发动机内工作,所以我看了一下ember-rails来源,我最后只是直接在我的引擎中注册了倾斜的把手。 ember-rails中有一些配置可以更改根模板路径:handlebars.templates_root。但是我没有成功地让它在rails引擎中工作。

https://github.com/andrewmp1/spree_outlet

我仍然没有真正意识到如何使用虚拟应用程序进行集成测试。但它的出现。

答案 2 :(得分:0)

这是old ember app and also a rails engine。它使用基于gemfile条目的 ember-rails gem 。你可能想查一查。在此处查看它安装在rails应用程序中:ember-cart-example。此外,这是online demo of the mounted rails engine inside the rails app

答案 3 :(得分:0)

还有另一个解决方案:效率不高但是很简单,它适用于这种情况(ember作为rails应用程序中的引擎)。首先在引擎中创建初始化程序。引擎的config目录中没有初始化程序目录,但您可以创建一个,并且放置在其中的初始化程序将起作用。

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

任何其他与引擎相关的特定于ember的配置也可以放在这里