7

我有一個Rails應用程序,我在前端使用Ember。我想在目錄結構中將與花費有關的文件向下移動一層,但是當我這樣做時,模板不再呈現。如何使用ember-rails gem爲我的HandlebarsJS模板指定替代目錄?

在平原,香草,工作的應用程序的版本,我的目錄結構是:

./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代碼向下移動一層,而當我這樣做時,模板不會呈現。 (應用程序的部件使用灰燼,而不是整個應用程序,我試圖通過資產管道設置兩個獨立的路徑。)

期望結構是:

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

用:的application.js(修訂: '需要餘燼應用內' 變成了 '要求embro /餘燼應用內')

//= require jquery 
//= require jquery_ujs 
//= require handlebars 
//= require ember 
//= require ember-data 
//= require_self 
//= require embro/ember-app 
App = Ember.Application.create(); 

012(餘燼-app.js是未經修正)。

正如我所說,移動後,模板內容都不會出現在屏幕上。屏幕上或控制檯中沒有錯誤,只是一個空的應用程序。

當我在控制檯中檢查Ember.TEMPLATES時,列出了所有預期的模板。此外,如果我在合適的rails視圖中將所需的內容放在x-handlebars模板中,則內容將成功呈現,就像它與原始目錄結構一樣。

例如,在應用程序/視圖/首頁/ 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選項,我想知道這是否是關鍵。我已經玩了一下,沒有運氣。

任何想法?


UPDATE:

恐怕我沒有與templates_root選項的運氣。作爲一個實驗,我嘗試構建一個新的簡單的rails應用程序,並使用ember-rails bootstrap生成器啓動並運行它。一切都很好,但是如果我試圖簡單地更改模板文件夾(例如app/assets/javascripts/templates - > app/assets/javascripts/temple)的名稱,並對sprockets includes和config文件進行相應更改,我得到了同樣的結果。

templates_root選項有可能被破壞了嗎?

我使用Ruby 1.9.3,Rails的3.2.11,燼護欄0.10.0

任何指針我應該在餘燼/餘燼護欄/車把源代碼在哪裏?已經開始探索。

謝謝!

+2

即使templates_root仍然只能將您限制到一個名稱空間。我想要做同樣的事情,但也有一些像admin.js和admin/templates部分。 – ootoovak 2013-04-07 06:09:56

回答

16

你是對的,你需要設置templates_root。嘗試添加

config.handlebars.templates_root = 'embro/templates' 

到配置塊application.rb,或

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

到一個新的初始化,其中RailsApp是無論你的應用程序被命名。

編輯:

我能夠重現你templates_root描述的行爲。我的修補程序是刪除我的應用程序的/tmp文件夾,然後重新啓動導軌。之後,模板被正確命名。

編輯:

更準確地說,你需要改變templates_root後清除緩存鏈輪在/tmp/cache/assets

編輯:

如在下面的評論中提到,一個簡單的rake tmp:cache:clear應注意的問題。

+0

謝謝,但不幸的是仍然無法正常工作。 – doublea 2013-02-19 13:48:21

+0

太棒了。不夠感謝你! – doublea 2013-02-19 19:22:16

+1

Legen ....等等...... dary。我一直在我的頭上撞牆幾個小時。我所需要做的就是刪除damn/tmp目錄。謝謝 – 2013-02-27 10:13:20