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にあります。

Source: https://habr.com/ru/post/J194968/


All Articles