使用资产管道和pjax时未捕获的ReferenceError

时间:2011-11-14 17:44:42

标签: jquery ruby-on-rails coffeescript asset-pipeline

好的,这听起来像是一个新手的错误......但我似乎无法弄清楚发生了什么。 我对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。

我认为我不了解资产管道的运作方式......

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果有疑问,请转到生成的JavaScript以查看正在发生的事情。你可能会看到这样的东西:

(function() {
  // Your code here
}).call(this);

这是Javascript中用于避免命名空间冲突的标准机制(Coffeescript默认情况下会这样做),因此除非您将它们显式附加到浏览器中的全局对象(window),否则在此文件外部不可见对象, node.js中的exports,...)。

顺便提一下,请注意您没有遵循常用的Unobtrusive Javascript指南:您应该使用JavaScript设置事件,而不是使用HTML标记中的内联事件。一些参考文献:herehere