Итак, в app/assets/javascript/faye.js.coffee.erb
у меня есть следующее:
$('#room_tag').bind('blur', () ->
alert('Hey!')
)
Весь другой код в нем, такой как: sendmessage('room', 'message')
, работает нормально. И я могу скопировать и вставить код, сгенерированный из вышеприведенного блока, и вставить его в Chrome, он отлично работает. Я предполагаю, что это потому, что это рельсы или coffeescript?, либо в одном из них, обертывает весь файл в:
(function() {
// your generated code here
}).call(this);
Также было бы для меня способом доступа к методам, которые там определены? Можно ли определить метод там, не присваивая его переменной?
1) Скорее всего, ваш вызов .bind
выполняется слишком рано, прежде чем документ будет готов и, следовательно, ничего не сделает. Оберните его при вызове $(document).ready
, как этот
$(document).ready ->
$('#room_tag').bind 'blur', ->
alert 'Hey!'
И на самом деле симпатичный ярлык для этого, поскольку функция jQuery по умолчанию $
является псевдонимом для $(document).ready
, вы можете просто сделать:
$ ->
$('#room_tag').bind 'blur', ->
alert 'Hey!'
2) Это coffeescript, который обертывает все в определении самоисполняемой функции.
3) Если вы хотите сделать глобальную функцию в coffeescript, явно назначьте ее как свойство глобального объекта window
window.myFunc = (arg1) ->
alert arg1
2) и 3) четко объяснены в Документах CoffeeScript
The usual caveats about CoffeeScript apply — your inline scripts will run within a closure wrapper, so if you want to expose global variables or functions, attach them to the window object.
$('#room_tag').length
. Если это 1
, элемент существует во время выбора; если это 0
, это не так.