7

我有一个 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/

with:application.js(修订:'require ember-app'变成'require 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 时,会列出所有预期的模板。此外,如果我将所需的内容放在适当的 rails 视图中的 x-handlebars 模板中,则内容会成功呈现,就像它使用原始目录结构一样。

例如,在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>

......我们很高兴再去一次。

但是,如果我将 rails 视图留空,就像我对原始结构所做的那样,那就不行了。

想知道 ember-rails gem 是否需要将车把模板存在于 app/assets/javascripts/templates 中,以及是否有办法覆盖它。文档提到向应用程序配置块添加一个 templates_root 选项,我想知道这是否是关键。我玩了一会儿,还没有运气。

有任何想法吗?


更新:

恐怕我对 templates_root 选项没有任何运气。作为一个实验,我尝试构建一个新的、简单的 Rails 应用程序,并使用 ember-rails 引导生成器启动并运行它。一切都很好,但是如果我尝试简单地更改模板文件夹的名称(即 app/assets/javascripts/templates -> app/assets/javascripts/temple),并对 sprockets 包含和配置文件进行适当更改,我' m 得到相同的结果。

templates_root 选项是否有可能以某种方式损坏?

我正在使用 Ruby 1.9.3、Rails 3.2.11、ember-rails 0.10.0

任何指向我应该在 ember/ember-rails/handlebars 源代码中查看的位置的指针?已经开始四处闲逛了。

谢谢!

4

1 回答 1

16

你是对的,你需要设置templates_root. 尝试添加

config.handlebars.templates_root = 'embro/templates'

中的配置块application.rb,或

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

到一个新的初始化程序,RailsApp您的应用程序在哪里命名。

编辑:

我能够重现您描述的行为templates_root。对我来说,解决方法是删除/tmp我的应用程序文件夹并重新启动 rails。之后,模板被正确命名。

编辑:

更准确地说,您需要/tmp/cache/assets在更改后清除 sprockets 缓存templates_root

编辑:

正如下面的评论中提到的,一个简单的rake tmp:cache:clear应该解决这个问题。

于 2013-02-19T04:42:29.180 回答