Строка не является функцией в Coffescript - PullRequest
0 голосов
/ 20 января 2012

Я только начал изучать coffeescript, и это здорово, но это сложно ..

Я пытаюсь перевести код, который работал в javascript, на coffeescript

, и у меня ничего не получается, по ссылкея опубликовал 3 вставки

  1. js.js - оригинальный код, который работает
  2. cs.coffee - та же версия, но в coffeescript
  3. compiled.js, переведенная cs compilerверсия js

в переводе js я получил ошибку "String is not function" где-то в лямбде, которая возвращается к карте

gist ссылка на исходный код

Ответы [ 2 ]

9 голосов
/ 20 января 2012

.length not 0

компилируется в

.length( !0 )

3 голосов
/ 20 января 2012
  1. coffeescript's @ - это просто сокращение для this.

Так, где у вашего исходного js есть:

if (input1.val().length <= 4 ...

ваш coffeescript должен иметь

if   input1.val() <= 4 
  1. Если у вас есть $(this) в вашем исходном js, вам все еще нужно $(this) в вашем coffeescript.Поэтому

    или @ input1.map (-> this.val (). Match (/ \ s + / g)). Длина не 0

должна быть:

or   @input1.map(-> $(this).val().match(/\s+/g)).length not 0

Я не вижу никаких других проблем, попробуйте и посмотрим, сработает ли это, или все еще есть ошибки.

[Редактировать]

Были и другие проблемы, в основном связанные с not 0, а также с брекетингом.Вот рабочий (я думаю) coffeescript:

    if input1.val() <= 4 \
    or (input1.map(-> $(this).val().match(/\s+/g)).length != 0) \
    or (input1.map(-> $(this).val().match(/[^A-Za-z0-9]/g)).length != 0)
    then input1.attr('id','error-highlight');
    else input1.attr('id','success-highlight');

Это становится:

  (function() {
    if (input1.val() <= 4 || (input1.map(function() {
      return $(this).val().match(/\s+/g);
    }).length !== 0) || (input1.map(function() {
      return $(this).val().match(/[^A-Za-z0-9]/g);
    }).length !== 0)) {
      input1.attr('id', 'error-highlight');
    } else {
      input1.attr('id', 'success-highlight');
    }
  }).call(this);

Что выглядит правильно.

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