如何 运行 来自 Rails 7 的单文件 javascript 音板应用程序
How to run a single-file javascript soundboard app from Rails 7
我有一个来自 App Academy 的单文件 Javascript 音板应用程序。代码工作正常,但我如何将它“连接”到 Rails 7 服务器?我正在努力弥合前端 javascript 和后端 Rails.
之间的理解
如果我将内容粘贴到 app/javascript/application.js 中,它就会运行,但我想将其保留在一个单独的文件中:'app/javascript/soundboard/soundboard.js'
我从一个新的 Rails 7 项目开始
$ rails new soundboard
我添加到 /config/importmap.rb:
pin_all_from "app/javascript/soundboard", under: "soundboard"
我添加到app/javascript/application.js:
import "soundboard"
我的app/javascript/soundboard/soundboard.js:
const sounds = [
'camera',
'ding',
'logout',
'noise',
'phone',
'pop'
];
sounds.forEach((sound) => {
const btn = document.createElement('button');
btn.classList.add('btn');
btn.innerText = sound;
btn.addEventListener('click', ()=>{
stopSongs();
document.getElementById(sound).play();
});
document.getElementById('buttons').appendChild(btn);
});
function stopSongs(){
sounds.forEach(sound =>{
const song = document.getElementById(sound);
song.pause();
song.currentTime = 0;
});
}
我需要添加一些东西到 app/javascript/soundboard/soundboard.js
类似于:module.exports=Soundboard
我想出了折衷方案。
不要将文件放在自己的目录中,而是将其放入默认目录“app/javascript/controllers” 将其从 soundboard.js 重命名为 soundboard_controller.js
它的完整路径应该是 app/javascript/controllers/soundboard_controller.js
更新 HTML 视图的使用位置。
<div id="buttons" data-controller="soundboard"></div>
(添加值等于文件名的“data-controller”元素,不包括“_controller.js”)。
无需修改文件:
config/importmap.rb
app/javascript/application.js
我有一个来自 App Academy 的单文件 Javascript 音板应用程序。代码工作正常,但我如何将它“连接”到 Rails 7 服务器?我正在努力弥合前端 javascript 和后端 Rails.
之间的理解如果我将内容粘贴到 app/javascript/application.js 中,它就会运行,但我想将其保留在一个单独的文件中:'app/javascript/soundboard/soundboard.js'
我从一个新的 Rails 7 项目开始
$ rails new soundboard
我添加到 /config/importmap.rb:
pin_all_from "app/javascript/soundboard", under: "soundboard"
我添加到app/javascript/application.js:
import "soundboard"
我的app/javascript/soundboard/soundboard.js:
const sounds = [
'camera',
'ding',
'logout',
'noise',
'phone',
'pop'
];
sounds.forEach((sound) => {
const btn = document.createElement('button');
btn.classList.add('btn');
btn.innerText = sound;
btn.addEventListener('click', ()=>{
stopSongs();
document.getElementById(sound).play();
});
document.getElementById('buttons').appendChild(btn);
});
function stopSongs(){
sounds.forEach(sound =>{
const song = document.getElementById(sound);
song.pause();
song.currentTime = 0;
});
}
我需要添加一些东西到 app/javascript/soundboard/soundboard.js
类似于:module.exports=Soundboard
我想出了折衷方案。
不要将文件放在自己的目录中,而是将其放入默认目录“app/javascript/controllers” 将其从 soundboard.js 重命名为 soundboard_controller.js
它的完整路径应该是 app/javascript/controllers/soundboard_controller.js
更新 HTML 视图的使用位置。
<div id="buttons" data-controller="soundboard"></div>
(添加值等于文件名的“data-controller”元素,不包括“_controller.js”)。
无需修改文件:
config/importmap.rb
app/javascript/application.js