如何使用ember-rails gem为HandlebarsJS模板指定备用目录?

我有一个Rails应用程序,我在前端使用Ember。 我想将与ember相关的文件在目录结构中向下移动一级,但是当我这样做时,模板不再渲染。

在普通的,vanilla,应用程序的工作版本中,我的目录结构是:

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

with: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 ….

  

hello

{{ outlet }}

this is the index

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

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

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

有任何想法吗?


更新:

害怕我没有运气的templates_root选项。 作为一个实验,我尝试构建一个新的,简单的rails应用程序,并使用ember-rails bootstrap生成器启动并运行它。 一切都很好,但如果我然后尝试简单地更改模板文件夹的名称 (即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源代码中我应该看到的任何指针? 已经开始四处寻找。

谢谢!

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

 config.handlebars.templates_root = 'embro/templates' 

application.rb的配置块,或

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

到一个新的初始化程序,其中RailsApp是您的应用程序命名的任何内容。

编辑:

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

编辑:

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

编辑:

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