Как вызвать функцию coffeescript из js.erb в Rails 3 и как понять область видимости в Javascript

carts.js.coffee

$(document).ready ->
    add_book: () ->
        alert "hihi!!"

Я попытался вызвать window.add_book (); и add_book (); в

add_to_cart.js.erb

Но оба работать не могут.

add_book();
window.add_book();

И не отображалась ошибка на консоли Firebug или Webrick

Кстати не могу понять

Что означают переменные или функции в

(function() {})

или когда функцию выполняет {{}}

({
add_book: function() {
return alert("poc123!!");
}
});

Есть ли какой-нибудь учебник или ключевое слово, которые позволят мне найти связанные ресурсы?

заранее спасибо


person newBike    schedule 30.10.2013    source источник
comment
Здесь вы получите ответ stackoverflow.com/questions/ 9254253 /   -  person LHH    schedule 30.10.2013
comment
@rubyist, этот случай другой.   -  person Billy Chan    schedule 30.10.2013


Ответы (2)


Причина в том, что вы не можете использовать $(document).ready в js erb или coffee erb.

Когда вы доставляете этот js-erb через Ajax, документ уже давно готов. Функции внутри вашего erb никогда не будут вызваны, если они готовы к документу.

Итак, простое решение - удалить готовый документ и напрямую вызвать функции.

person Billy Chan    schedule 30.10.2013

Я не уверен, чего вы ожидаете, используя add_book: внутри функции, но это определенно не то, что вам нужно. Вот сгенерированный javascript для вашего кода:

$(document).ready(function() {
  return {
    add_book: function() {
      return alert("hihi!!");
    }
  };
});

Вы возвращаете объект, содержащий функцию, но никто не может получить к нему доступ, поскольку на него никто не ссылается.

Вам нужна переменная, способная содержать ссылку:

$(document).ready ->
    window.add_book = () ->
        alert "hihi!!"

Теперь вы можете использовать его где угодно (конечно, после того, как он уже готов к работе), напрямую вызывая add_book().

Если вы используете Chrome, это расширение может помочь вам обнаружить проблемы coffeescript: это live shell, которая позволяет вам видеть вычисленные js и запускать код coffeescript.

Кстати, я бы не рекомендовал использовать coffeescript, пока вы не научитесь свободно работать с javascript.

person kik    schedule 30.10.2013