繁体   English   中英

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

Custom Javascript functions imported in Rails 6

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

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

快速介绍:在我正在开发的应用程序中,用户可以在处理多件事情时选择一个日期。 应用程序需要能够检查该日期并确保该日期不属于周末或节假日。 这发生在几个屏幕上。 因此,为了成为一名优秀的小程序员,我不想在我需要的每个 javascript 文件中编写 check_holiday_or_weekend function 代码。 我希望能够在某处的 js 文件中对此进行一次编码,并能够在需要时在其他几个 js 文件中引用它。

在 Rails 4 中,function 位于 application.js 的末尾,随处可用。

但是,对于 Rails 6.1 和 Webpack,我无法使用 function。

这是我到目前为止所尝试的。

在 application.js 的末尾添加 function 就像我在 Rails 4 中所做的那样。当我这样做时,我收到一个 ReferenceError ,表明 function 不存在或尚未声明。

在阅读完该主题后,我发现 Webpack 对范围非常严格,您必须将函数写入单独的 js 文件,然后导入该 js 文件,甚至使用视图中的 <%=javascript_pack_tag %> 导入该文件仅在该视图上。 我也尝试过,但无济于事。

最后,我看到一些解决方案实现了一些看起来更像 ES6 的 realm 和 React 的解决方案,建议将 function 写入 js 文件并导出 ZC1C425268E683854F1AB5074C17A。 然后,在需要使用的js文件中导入那个function。 所以这就是我所在的地方,它仍然无法正常工作。

所以现在,我的 application.js 保持不变我已经创建了 globals.js 文件,文件如下 function (这只是一个快速测试 function 看看它是否工作)

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

所以从这里开始,我完全不知道 go 的方向,除了在我需要的每个 js 文件中编码 function 之外。 这真的是非常糟糕的编码。

注意:我也尝试过以不同的方式编写函数,例如

const potato = function(){
...};

or 

var potato = function() {
...
};

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

1 个回复

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

对于 webpacker,范式是 JavaScript 不是“松散的”。 它依附于元素,很少或根本没有全局 function 的概念。

但是,在 Rails 6.1 中,您仍然可以使用旧的资产管道进行 JavaScript 洒水:在多个地方需要但又想保持 DRY 的那些小东西。

因此,将javascript目录添加到app/assets 然后打开app/assets/manifest.js和 append //= 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 笔记本中调用它们。 这些函数使用了一些模块,例如 seaborn、matplotlib,我已经在 jupyter notebook 中导入了这些模块。 当我调用 function 时,它会抛出找不到 ...

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

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

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

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

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