【发布时间】:2019-07-14 06:14:45
【问题描述】:
我想在我的 Rails 应用程序中使用 ToastifyJS 作为 Toast 的 JS 库。由于 Rails 6 使用 Webpack 作为默认设置,所以我在谷歌上搜索了一段时间,结果一无所获。
这是我所做的:
安装 Rails 6:
rails _6.0.0.rc1_ new myapp -d mysql
安装 JS 库 toastify-js:
yarn add toastify-js
app/assets/stylesheets/application.scss
@import "toastify-js/src/toastify";
app/javascript/packs/application.js
import Toastify from 'toastify-js'
document.addEventListener("turbolinks:load", () => {
Toastify({
text: "This is a toast",
duration: 3000,
destination: "https://github.com/apvarun/toastify-js",
newWindow: true,
close: true,
gravity: "top", // `top` or `bottom`
position: 'left', // `left`, `center` or `right`
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
stopOnFocus: true // Prevents dismissing of toast on hover
}).showToast();
})
按预期工作。但是我想要的有点不同。作为祝酒词/通知,您可以编写如下代码:
app/views/layouts/application.html.erb
<% if flash.any? %>
<script type="text/javascript">
document.addEventListener("turbolinks:load", () => {
<% flash.each do |key, value| %>
Toastify({
text: "<%= value %>",
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)"
}).showToast();
<% end%>
})
</script>
<% end %>
我收到了这个错误:Uncaught ReferenceError: Toastify is not defined 虽然我在application.js 中做了import Toastify from 'toastify-js'?
还有一件事,为了让代码结构更简洁,我把所有关于toast的js都写在一个文件里了:
app/javascript/packs/toast.js
import Toastify from 'toastify-js'
const toastNotice = Toastify({
text: "This is a toast",
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
});
const toastAlert = Toastify({
text: "This is a toast",
backgroundColor: "linear-gradient(to right, #fcb045, #fd1d1d)",
});
app/javascript/packs/application.js
import './toast.js'
app/views/shared/_flash.html.erb
<% if flash.any? %>
<script type="text/javascript">
<% flash.each do |key, value| %>
toast<%= key.capitalize %>.options.text = "<%= value%>";
toast<%= key.capitalize %>.showToast();
<% end%>
</script>
<% end %>
但我又收到了Uncaught ReferenceError: toastAlert is not defined
【问题讨论】:
标签: javascript ruby-on-rails webpack webpacker