ここでの私の質問は Rails 3.1を使用しています。「ページ固有の」JavaScriptコードをどこに配置しますか の代わりにRails 6の代わりにRails 3.1。
投稿のインデックスページに使用したいJavaScriptがあるとします。そのファイルはどこに配置し、どのようにインクルードしますか?
前の質問では、回答は通常Railsアセットパイプラインを利用します。ただし、Rails 6を使用すると、JavaScriptファイルのアセットパイプラインの代わりにwebpackerを使用することが理解できます。
注:ファイルにalwaysを含めたくありません。例えば。著者のインデックスページを表示している場合、投稿のインデックスページのJavaScriptファイルを含めたくありません。どうして?投稿のインデックスページのJSファイルに$('li').on('click', changeColor);
があるとします。おそらくそのコードを著者のインデックスページで実行したくありませんが、ファイルが含まれている場合は実行されます。名前空間を使用することでこの問題を回避できますが、不要なファイルを含めない方がクリーン(かつパフォーマンスが高い)と思います。
私はコーヒースクリプトで質問に答えようと思います。理解するのが良いので、キーはイベント 'turbolinks:load'を使用してコンテンツを確認することですRails新しいメソッドで投稿ページをロードする、ページ基本的にデフォルトではクラス.posts.new
app.post.coffee内
class App.Post
render: ->
console.log "Post Edit / new render"
console.log "all this script below will only run"
console.log "if you open Post with new or edit method"
$(document).on "turbolinks:load", ->
if $(".posts.new")[0] || $(".posts.edit")[0]
post = new App.Post
post.render()
app.author.coffee内
class App.Author
render: ->
console.log "Author Edit / newrender"
console.log "all this script below will only run"
console.log "if you open Author with new or edit method"
$(document).on "turbolinks:load", ->
if $(".authors.new")[0] || $(".authors.edit")[0]
author = new App.Author
author.render()
コーヒースクリプトをjsに変換すると、post.jsになります
App.Post = class Post {
render() {
console.log("Post Edit / new render");
console.log("all this script below will only run");
return console.log("if you open Post with new or edit method");
}
};
$(document).on("turbolinks:load", function() {
var post;
if ($(".posts.new")[0] || $(".posts.edit")[0]) {
post = new App.Post;
return post.render();
}
});