我正在使用filepicker-rails并将其设置为:
<%= p.filepicker_field :bathroom_images, cache: true, multiple: true, onchange: "$.onFileUpload(event);" %>
这会将onChange事件设置为我抛出的任何函数(此处有更多详细信息)
现在,这里有两个问题:我该如何设置我的coffeescript来调用它?
ready = ->
console.log("ready")
onFileUpload = (event) ->
console.log "results of upload stored"
window.results = event
$(document).ready ready
当我上传文件并触发事件时,此代码将引发错误:
Uncaught TypeError: $.onFileUpload is not a function
这是具体的问题。这是我真正想知道的:好的,所以您告诉我如何调用它,我不了解JS的哪些方面,我需要更好地学习才能了解这里出了什么问题?
我以为我正在创建一个变量(onFileUpload),该变量引用了我想将表单触发的事件传递给的函数。我在这里想念什么?
第一个问题是,您要让rails调用,$.onFileUpload(event);
但是要实现一个onFileUpload(event)
缺少'$'的命名函数。部分。我建议将Rails代码中的更改为onFileUpload(event)
。
第二个问题是,rails试图在全局名称空间上调用此方法,但是您将其隐藏在rails无法访问的子范围内。发生这种情况的原因是,您将所有代码包装在jQuery ready事件中,并且由于javascript的工作方式,该函数内部的任何代码都不能被其外部的代码访问,除非另行指定。
现在要解决此问题,只需简单地创建onFileUpload
全局window
对象的属性。我不是coffeescript专业人士,所以我不知道这是否是正确的方法,但是您可以通过将代码更改为来解决此问题:
ready = ->
console.log("ready")
window.onFileUpload = (event) ->
console.log "results of upload stored"
window.results = event
$(document).ready ready
这应该使函数onFileUpload全局允许rails调用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句