ruby-on-rails - 如何在 CoffeeScript 和 Rails 6 中调用函数?
问题描述
我正在尝试遵循我认为是在旧版本的导轨上完成的动作电缆教程。他们在 CoffeeScript 中使用了以下函数。但是,当我尝试运行它时,控制台会打印出附加到相应尝试的代码块的错误。第一个块是教程,第二个块是我试图解决这个问题。
问题是本教程没有明确解释它的目的APP
或它代表什么。
(function() {
this.App || (this.App = {});
App.cable = ActionCable.createConsumer();
}).call(this);
Error:
CoffeeScriptError: C:\Users\User\Documents\Projects\ror\ror-portfolio-1-dev-match-master\app\javascript\packs\application_coffee.coffee:23:2: error: reserved word 'function'
(function() {
cableFunc {
this.App || (this.App = {});
App.cable = ActionCable.createConsumer();
}
cableFunc()
Error:
CoffeeScriptError: C:\Users\User\Documents\Projects\ror\ror-portfolio-1-dev-match-master\app\javascript\packs\application_coffee.coffee:24:2: error: unexpected this
this.App || (this.App = {});
如果有人能告诉我为什么这没有编译,因为 CoffeScript 不应该抛出它抛出的错误,我将不胜感激。
另外,我曾经webpacker:install:coffee
在我的应用程序中设置 CoffeeScript。
解决方案
一个简单的js2coffee转换将产生:
(->
@App or (@App = {})
App.cable = ActionCable.createConsumer()
).call this
图案:
(function() {
this.App || (this.App = {});
App.cable = ActionCable.createConsumer();
}).call(this);
是一个过时但非常常见的 JS 习惯用法,用于定义全局变量。尽管使用 IIFE(立即调用函数表达式)比使用 call 和 更常见this
。
(function(global) {
global.App || (global.App = {});
App.cable = ActionCable.createConsumer();
}(window));
这个想法是,不是每个库都使用其函数(或像 Prototype 那样增加内置对象),而是在全局范围内坚持自己的对象。将声明包装在函数中会创建一个范围,您可以在其中声明“私有”函数和变量,而不会泄漏到全局范围中。
这个成语早于真正的 javascript 模块和exports
andimports
关键字。它在 2020 年与<marquee>
元素一样时髦,并且无法与 webpack 一起使用。
这是因为 webpacker 实际上会将导入视为模块,this
而不是像在将文件内容连接在一起的 spocket 中那样被视为全局范围。
相反,您需要显式传递全局范围。
(->
@App or (@App = {})
App.cable = ActionCable.createConsumer()
).call window
推荐阅读
- php - 如何构建对象/数组?
- jquery - 单击行以打开模态数据表
- python - 如何计算 csv 文件中的“3day_before_change”
- orocrm - 在我们的 twig 文件中使用 loadModules 时遇到问题
- prestashop-1.7 - 新鲜的 prestashop 1.7 安装 curl 超时
- c# - 设置 SipSorcery 服务器
- css - prestashop 1.7 css 文件根据 url 地址显示
- flutter - Flutter iOS 应用程序大小问题:Runner.app 大小约为 450MB。任何人都可以帮助如何减少这种情况?
- android - 设计视图上未显示 EditText 框 - Android Studio
- spring-boot - 在 SpringBoot 中禁用 Hibernate provider_disables_autocommit