Путаница в CoffeeScript?(KeyUp Jquery) - PullRequest
       1

Путаница в CoffeeScript?(KeyUp Jquery)

1 голос
/ 17 февраля 2012

Я только начал использовать coffeescript, чтобы увидеть, о чем идет речь, и мне это нравится.Однако при преобразовании моего старого сценария в кофе у меня возникла проблема:

$(function() {
    $(create_MP).keyup(function(e){
        if(e.which == 16) {
            isShift = false;
        }
    });
});

Это JQuery, который у меня был раньше, поэтому я попытался преобразовать его в coffeescript:

jQuery ->
    $(create_MP).keyup(e) ->
        if e.which == 16
            isShift = false

Но я получаю эту ошибку при открытии консоли:

application.js:23Uncaught TypeError: Object [object Object] has no method 'keyUp'

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 17 февраля 2012

Этот код неверен независимо. Размещенный вами CoffeeScript эквивалентен этому:

jQuery(function() {
    $(create_MP).keyup(e)(function() {
        if (e.which == 16) {
            isShift = false
        }
    }
}

То есть вы вызываете результат keyup(e) и передаете ему функцию. Вам нужно вызвать keyup() с функцией в качестве аргумента. Самый простой способ исправить это - просто поставить пробел между keyup и (e) ->.

jQuery ->
  $(create_MP).keyup (e) ->
    isShift = false if e.which is 16
3 голосов
/ 17 февраля 2012

Проблема, которую вы отмечаете в своем комментарии, не единственная ваша проблема. Вам нужен пробел перед (e), иначе CoffeeScript решит, что вы пытаетесь вызвать функцию keyup с аргументом e. Вы хотите сказать это:

jQuery ->
    $(create_MP).keyup (e) ->
        if e.which == 16
            isShift = false

Без пробела ваш JavaScript будет выглядеть так:

jQuery(function() {
  return $(create_MP).keyup(e)(function() {
    // ...

и это не имеет никакого смысла, так как keyup(e) не вернет функцию. Но если вы добавите пробел, то (e) -> станет определением анонимной функции, которая принимает один аргумент e:

jQuery(function() {
  return $(create_MP).keyup(function(e) {
    // ...

и это не только имеет смысл, но и делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...