繁体   English   中英

在 Rails 6 中导入的自定义 Javascript 函数

Custom Javascript functions imported in Rails 6

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我看过很多关于它的帖子,我尝试了几种解决方案都无济于事。 我真的把我的头发拉过这个。

快速介绍:在我正在开发的应用程序中,用户可以在处理多个事情时选择一个日期。 应用程序需要能够检查该日期并确保该日期不是周末或假期。 这发生在几个屏幕上。 因此,为了成为一名优秀的小程序员,我不想在我需要的每个 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!!);
}

然后在该特定屏幕上使用的 js 文件 screen_specific.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() {
...
};

任何见解或建议将不胜感激。

1 个回复

我只是为自己“解决”了这个问题。 请注意,这是一个非最佳解决方案:它基本上将您的代码植根于过去并增加了技术债务。 然而,这是我学到的。

对于 webpacker,范式是 JavaScript 不是“松散的”。 它附加到元素上,并且几乎没有或没有全局函数的概念。

但是,在 Rails 6.1 中,您仍然可以将旧的资产管道用于 JavaScript 洒水:那些您在多个地方需要但希望保持 DRY 的小部分。

因此,将javascript目录添加到app/assets 然后打开app/assets/manifest.js并附加//= link_directory ../javascript .js

然后,在您的布局中,您可以为相应的 js 文件添加javascript_include_tag 它将以老式的方式加载它,并且这些功能应该在该页面中可用。

显然,旧的资产管道是您(和我)应该远离的东西。 但这可能会给你一些喘息的空间,直到你这样做。

1 在angular中导入自定义javascript

如何以angular导入https://anseki.github.io/plain-draggable/ ? 我已经将npm i plain-draggable拖入npm i plain-draggable然后将angular.json导入.min.js 在html中 在组件中: decl ...

2 在 Jupyter Notebook 中导入自定义函数

我正在尝试为数据科学项目重用一些常见的自定义函数。 我将这些函数保存为 .py 文件并在 jupyter notebook 中调用它们。 这些函数使用了一些模块,例如我已经在 jupyter notebook 中导入的 seaborn、matplotlib。 但是,当我调用该函数时,它会抛出找不到这 ...

3 在AWS EMR上的MapReduce代码中导入自定义函数

我已经为此奋斗了2个小时! 我在python中创建了一个映射器脚本,该脚本在其他python脚本中导入了我的自定义函数之一。 该代码在我的终端上运行良好。...问题是当我将此映射器功能上传到AWS Elastic MapReduce时。 我的工作失败,并显示错误消息“无法导入模块 ...

4 如何在我的 Azure ML 实验脚本中导入自定义函数?

我可以成功提交实验以在 Azure ML 上的远程计算目标上进行处理。 在我的笔记本中,为了提交实验,我有: 然而,为了保持整洁,我想在一个辅助脚本上定义我的通用函数,所以第一个将导入它。 在我的脚本实验文件 exp01.py 上,我想要: 问题是:Azure 不会让我导入 custom ...

6 在Azure python函数中导入自定义模块

我正在构建一个python函数,我需要在代码中添加我的自定义模块。 我的azure函数如下所示: 我所做的是将我的function文件夹作为标准路径插入,因此python也在该文件夹中查找库。 使用Visual Studio Code,此功能在本地环境中可完美运行。 但是,当我部署 ...

7 在 Python 中导入自定义函数模块

我在堆栈交换中多次看到这个问题,但即使尝试了所有解决方案,我也无法让它工作。 我在 python 中有一个名为functions.py的模块。 我有另一个名为main.py脚本。 我正在运行 Visual Studio 代码。 当我尝试运行下面的代码时出现错误 # Import the custo ...

9 在jasper中导入自定义字体

我正在开发一个使用Jasper生成PDF的应用程序。 为此,我有一个在Jasper中生成的自定义字体,但问题是我无法使其正常工作。 每当我尝试生成文档时,都会出现以下错误: 我在IntelliJ上,并且已经在项目路径中设置了像这样的字体jar 图书馆看起来像这样 ...

10 在 Go 中导入自定义包

我查看了这个答案,但出于某种原因,我无法正确理解或不起作用 另外,在我开始之前,我知道我们如何用 github 做到这一点,但我想在没有 github 的情况下尝试它 首先假设我有一个 main.go 文件 通知subpack在这里,它是定制包我做了。 子包像这样存在 并包含以下代码 运 ...

2018-12-21 05:54:32 3 2390   go
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM