7

Railsアプリケーションがあり、フロントエンドでEmberを使用しています。残り火関連のファイルをディレクトリ構造の1つ下のレベルに移動したいのですが、移動すると、テンプレートがレンダリングされなくなります。

アプリケーションのプレーンでバニラな動作バージョンでは、私のディレクトリ構造は次のとおりです。

./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コードを1レベル下に移動したいのですが、移動すると、テンプレートがレンダリングされません。(アプリケーションの一部はEmberを使用しますが、アプリケーション全体は使用しません。アセットパイプラインを介して2つの別々のパスを設定しようとしています。)

必要な構造は次のとおりです。

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

with:application.js(改訂:'requireember-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-applicationだけです。

コンソールで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>

...そしてまた行ってもいいです。

しかし、元の構造で行ったように、レールビューを空のままにすると、失敗します。

おそらくember-railsgemで、ハンドルバーテンプレートがapp / Assets / javascripts / templateに存在する必要があるかどうか、そしてこれをオーバーライドする方法があるかどうか疑問に思います。ドキュメントには、templates_rootオプションをアプリケーション構成ブロックに追加することが記載されていますが、これが重要かどうか疑問に思っています。私は少し遊んだことがありますが、まだ運がありません。

何か案は?


アップデート:

私はtemplates_rootオプションで運がないのではないかと心配しています。実験として、新しいシンプルなRailsアプリを作成し、ember-railsブートストラップジェネレーターを使用して起動して実行してみました。すべて順調ですが、スプロケットのインクルードと構成ファイルを適切に変更して、テンプレートフォルダーの名前を変更しようとすると(つまり、app / Assets / javascripts / templates-> app / Assets / javascripts /temple)、私は' m同じ結果が得られます。

templates_rootオプションが何らかの理由で壊れている可能性はありますか?

Ruby 1.9.3、Rails 3.2.11、ember-rails0.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より正確には、を変更した後、でスプロケットキャッシュをクリアする必要がありますtemplates_root

編集:

以下のコメントで述べられているように、単純なrake tmp:cache:clearものが問題を処理する必要があります。

于 2013-02-19T04:42:29.180 に答える