JavaScriptアプリケーションレールコードのAsset_pathメソッド

リッチクライアントRailsアプリケーションは、クライアント側のテンプレートを使用します。 これらのテンプレートがAsset Pipelineを使用して処理される場合、テンプレートへのアクセス方法に関する疑問が生じます。 実稼働環境では、ファイルへのパスは名前とmd5ハッシュで構成されます。 正しいパスを取得する1つの方法は、必要なヘルパー<%= asset_path(path/to/template.html) %>



が使用できるErb



プリプロセッサーでJavaScriptをラップすることです



より美しいソリューションを紹介します。



クライアント側でテンプレートが使用されるアプリケーションを考えてみましょう。 テンプレートのプリプロセッサはスリム[ 1 ]です。 プロジェクトでソースコードを整理する方法には焦点を当てません。 すべてのテンプレートをapp/assets/webapp/



ます。 テンプレートディレクトリから*.html.slim



テンプレートを*.html.slim



するようにアプリケーションを構成します。

 # config/application.rb config.assets.paths << Rails.root.join('app', 'assets', 'webapp') # config/initizlizers/assets_engine.rb Rails.application.assets.register_engine('.slim', Slim::Template) # config/environments/production.rb config.assets.precompile += ['*.html']
      
      







特定のテンプレートapp/assets/webapp/rubrics/edit.html.slim



を作成し、JavaScriptからアクセスしたいと思います。 実稼働環境にはそのようなファイルは存在しないため、アドレス/assets/rubrics/edit.html



に連絡することはできませんが、何か/assets/rubrics/edit-5eb3bb250d5300736006c8944e436e3f.html



が存在することになります。 論理パスrubrics/edit.html



とフルパスの対応表は、自動的に生成されるマニフェストファイルにあります。 しかし、それを使用することは常に正当化されるわけではなく、少なくとも多くの追加データが含まれます。



Gem js_assets



、特定のマスクに一致するファイルの対応表を作成する問題を解決します。



gemをインストールしたら、JavaScriptヘルパーを接続します。

 // app/assets/javascripts/application.js //= require app_assets
      
      





window.project_assets



テーブルは、変数window.project_assets



保存されます。 asset_path



ヘルパーasset_path



は、必要なファイルへの論理パスを引数として受け取り、環境を考慮して、ルートに相対的なパスを返します。

 var path = asset_path('rubrics/edit.html') // the function will return for development: // /assets/rubrics/edit.html // and for production // /assets/rubrics/edit-5eb3bb250d5300736006c8944e436e3f.html
      
      







ヘルパーの使用可能なファイルのリストの管理(アセットパイプライン処理を考慮)は、フィルターを介して行われます。 デフォルト値は次のとおりです。

 JsAssets::List.exclude = ["application.js"] JsAssets::List.allow = ["*.html"]
      
      





たとえば、 initializers



を使用して、それらを展開できinitializers







gemのソースコードはgithubにあります。



All Articles