【问题标题】:Ember-rails project as a mountable engine?Ember-rails 项目作为可安装的引擎?
【发布时间】:2013-06-14 17:29:39
【问题描述】:

Ember 和 Rails 新手在这里对两者都有一个严肃的问题。

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

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

问题是,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。

【问题讨论】:

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


    【解决方案1】:

    经过大量研究,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 的一部分。

    【讨论】:

      【解决方案2】:

      我刚刚在 Rails 引擎中创建了一个 ember 应用程序,我遇到了与您在获得车把支持时遇到的相同问题。我无法让 ember-rails 在引擎内工作,所以我查看了 ember-rails 源代码,最后我只是直接在我的引擎中注册了带有倾斜的车把。 ember-rails 里面有一些配置可以改变根模板路径:handlebars.templates_root。但是我没有成功让它在 Rails 引擎中工作。

      https://github.com/andrewmp1/spree_outlet

      我还没有真正理解如何使用虚拟应用程序进行集成测试。但它即将到来。

      【讨论】:

        【解决方案3】:

        这是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

        【讨论】:

        • 看起来他们正在手动定义每个视图,这正是您想要避免的情况:即 templateName: 'ember_cart/templates/carts/mini_cart_list'
        • @alex 您粘贴的代码是否为您解决了问题。如果是这样,您可能想接受自己的答案,以便将来 Google 带来的任何人都知道什么是有效的。
        • 是的,该解决方案确实有效,而且似乎是一种相对稳定的方法。但是我必须等待 2 天才能接受我自己的答案。
        • 也感谢您对此进行调查。希望对你有帮助。
        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-16
          • 2011-11-17
          • 2012-02-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多