我看过很多关于它的帖子,我尝试了几种解决方案都无济于事。我真的把我的头发拉到这个上面。
快速介绍:在我正在开发的应用程序中,用户可以在处理多件事情时选择一个日期。应用程序需要能够检查该日期并确保该日期不属于周末或节假日。这发生在几个屏幕上。因此,为了成为一名优秀的小程序员,我不想在我需要的每个 javascript 文件中编写 check_holiday_or_weekend 函数。我希望能够在某处的 js 文件中对此进行一次编码,并能够在需要时在其他几个 js 文件中引用它。
在 Rails 4 中,该函数位于 application.js 的末尾,并且随处可用。
但是,在 Rails 6.1 和 Webpack 中,我无法使用该功能。
这是我到目前为止所尝试的。
在 application.js 的末尾添加函数,就像我在 Rails 4 中所做的那样。当我这样做时,我得到一个 ReferenceError ,该函数不存在或尚未声明。
在阅读了该主题后,我发现 Webpack 对范围非常严格,您必须将函数写入单独的 js 文件,然后导入该 js 文件,甚至在视图中使用 <%=javascript_pack_tag %> 导入该文件仅在该视图上。我也尝试过,但无济于事。
最后,我看到一些解决方案实现了一些看起来更超出 ES6 和 React 领域的东西,建议将你的函数写入 js 文件并导出函数。然后,将该函数导入需要使用的 js 文件中。所以这就是我所在的地方,它仍然无法正常工作。
所以现在,我的 application.js 保持不变我已经使用以下函数创建了文件 globals.js(这只是一个快速测试函数,看看它是否工作)
globals.js
export const potato = () => {
alert("Potato!!);
}
然后在特定屏幕 screen_specific.js 上使用的 js 文件中
import { potato } from 'globals';
$(document).on("screen_specific#new:loaded screen_specific#create:loaded", function() {
potato();
}
当特定屏幕打开时,什么都没有发生,在控制台中我得到
Uncaught TypeError: Object(...) is not a function
我还尝试将命名导出更改为默认导出,但我收到相同的错误,尽管消息不同
具有默认导出的 globals.js
const potato = () => {
alert("Potato!!);
};
export default potato;
具有默认导入的 screen_specific.js
import potato from 'globals';
$(document).on("screen_specific#new:loaded screen_specific#create:loaded", function() {
potato();
}
Uncaught TypeError: globals__WEBPACK_IMPORTED_MODULE_0___default() is not a function
所以从这里开始,我完全不知道该往哪个方向发展,除了在我需要的每个 js 文件中编写函数。这真的是非常糟糕的编码。
注意:我也尝试过以不同的方式编写函数,例如
const potato = function(){
...};
or
var potato = function() {
...
};
任何见解或建议将不胜感激。