Ваш код ...
class foo
@bar = 'bob loblaw'
processRows: ->
$("#my-table>tr").each ->
id = $(this).attr("id")
@processRow id
processRow: (id) ->
console.log @bar + id
Транспортируется в ...
var foo;
foo = (function() {
function foo() {}
foo.bar = 'bob loblaw';
foo.prototype.processRows = function() {
return $("#my-table>tr").each(function() {
var id;
id = $(this).attr("id");
return this.processRow(id);
});
};
foo.prototype.processRow = function(id) {
return console.log(this.bar + id);
};
return foo;
})();
Что многое говорит о текущем контексте, в который он переводится.К сожалению, поскольку jQuery управляет контекстом, вам придется явным образом или объявить ссылку на this
.
вашего класса. Кстати, с этим сгенерированным кодом есть и другие проблемы, взгляните на этот сокращенный случай:
class foo
@bar = 'bob loblaw'
getBar: () ->
@bar
Транспилируется в:
var foo;
foo = (function() {
function foo() {}
foo.bar = 'bob loblaw';
foo.prototype.getBar = function() {
return this.bar;
};
return foo;
})();
Результаты попытки использовать этот фрагмент кода:
> foo.bar;
"bob loblaw"
> var f = new foo();
undefined
> f.getBar();
undefined
Ваш код, вероятно, ожидает, что @bar
является собственным свойством, но оно создается как статическое свойство foo
функции