Uncaught ReferenceError при использовании конвейера ресурсов и pjax - PullRequest
1 голос
/ 14 ноября 2011

Хорошо, это звучит как ошибка новичка ... но я не могу понять, что происходит. Я относительно новичок в Rails 3.1, coffeescript и в целом в конвейере ресурсов, поэтому у меня возникли некоторые проблемы с его выяснением.

В любом случае, вот в чем проблема.

В моем файле Users 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

Я попытался связать функцию с событием нажатия кнопки в документе .ready (объявлено в users.js.coffee), но проблема в том, что она не вызывается, потому что я использую pjax.

Мне кажется, я не понимаю, как работает конвейер активов или что-то в этом роде ...

Заранее спасибо за помощь.

1 Ответ

3 голосов
/ 14 ноября 2011

Если есть сомнения, перейдите к сгенерированному JavaScript, чтобы увидеть, что происходит. Вы, вероятно, увидите что-то вроде этого:

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

Это стандартный механизм, используемый в Javascript для предотвращения коллизий пространства имен (Coffeescript делает это по умолчанию), поэтому объекты не видны вне этого файла, если вы явно не присоедините их к глобальному объекту (window в браузере, exports в node.js, ...).

Кстати, обратите внимание, что вы не следуете общепринятым ненавязчивым правилам Javascript : вы должны устанавливать события, используя JavaScript, а не встроенные события в тегах HTML. Некоторые ссылки: здесь и здесь .

...