好的,这听起来像是一个新手的错误......但我似乎无法弄清楚发生了什么。 我对Rails 3.1,coffeescript和一般的资产管道都比较陌生,所以我在解决这个问题时遇到了一些麻烦。
无论如何,这是问题所在。
在我的用户index.html.erb文件中,我有一个按钮,它将通过ajax加载新的用户表单。加载表单的代码位于users.js.coffee中,按钮有一个onClick方法,指的是执行该工作的函数,就像这样。
index.html.erb
<%= button_tag "New User", :id => "btn_new_user", :onClick => "loadNewUserForm()", :path => "#{new_user_path}" %>
users.js.coffee
loaded = false
loadNewUserForm = ->
if not loaded
@path = $('#btn_new_user').attr("path")
$("#new-users-container").load(@path)
loaded = true
出于某种原因,当我点击“新用户”按钮时,我会继续
Uncaught ReferenceError: loadNewUserForm is not defined
我尝试将该函数绑定到document.ready中的按钮的click事件(在users.js.coffee中声明),但问题是它没有被调用,因为我正在使用pjax。
我认为我不了解资产管道的运作方式......
提前感谢您的帮助。
答案 0 :(得分:3)
如果有疑问,请转到生成的JavaScript以查看正在发生的事情。你可能会看到这样的东西:
(function() {
// Your code here
}).call(this);
这是Javascript中用于避免命名空间冲突的标准机制(Coffeescript默认情况下会这样做),因此除非您将它们显式附加到浏览器中的全局对象(window
),否则在此文件外部不可见对象, node.js中的exports
,...)。
顺便提一下,请注意您没有遵循常用的Unobtrusive Javascript指南:您应该使用JavaScript设置事件,而不是使用HTML标记中的内联事件。一些参考文献:here和here。