Rails中共享CoffeeScript函数:导入后函数未定义如何解决?
Rails中共享CoffeeScript函数的正确方法
问题出在CoffeeScript的默认行为:每个CoffeeScript文件的代码会被自动包裹在**自执行匿名函数(IIFE)**中,你定义的sample_function是这个闭包内的局部变量,其他文件无法直接访问。
下面是几种可行的解决方式:
方法1:挂载到全局window对象
修改app/assets/javascripts/util.js.coffee的代码,将函数绑定到全局window对象上,让其他文件能访问到:
window.sample_function = (word) -> console.log word
之后在sign_up/common.js.coffee里按你的方式require并调用即可:
//= require '../util' sample_function('hello world')
方法2:使用命名空间(推荐,避免全局污染)
为了避免过多全局变量冲突,可以定义一个专属命名空间:
# util.js.coffee window.MyApp ?= {} window.MyApp.sample_function = (word) -> console.log word
调用时通过命名空间访问:
//= require '../util' MyApp.sample_function('hello world')
方法3:确保依赖加载顺序
确认你的//= require '../util'语句写在调用函数的代码之前,Rails Asset Pipeline会按照require的顺序加载文件,顺序错误也会导致函数未定义的问题。
内容的提问来源于stack exchange,提问作者Tian Gao
相关产品推荐
相关产品推荐

