1

我正在尝试在 CoffeeScript 中做一个非常基本的事情:

...
nextId = $('.optionsTemplate').prev().children().length + 1
# 'alert nextId' gives 4, which is correct
...
newOption = /*selector of new option*/
newOption.attr 'id', 'item_options_' + nextId
newOption.attr 'name', 'item[options]['+ nextId +']'

因此,当我调用“nextId”时(设置 id 和名称时)-JS 控制台说“nextId 不是函数”

我尝试了几件事:

# get text instead of integer
nextId.text()

# make a function
getNextId = () ->
  $('.optionsTemplate').prev().children().length + 1

得到同样的错误。


这是编译的输出:

$('.addOption').on('click', function() {
  var contents, newOption, nextId;
  nextId = $('.optionsTemplate').prev().children().length + 1;
  contents = "<div class='row'>" + $('.optionsTemplate').html() + '</div>';
  $(this).before(contents);
  newOption = $('.optionsTemplate').prev().children().eq(-1).find('.text_field');
  newOption.attr('id', 'item_options_' + nextId);
  return newOption.attr('name', 'item[options][' + nextId(+']'));
});

对我来说似乎还可以。

4

2 回答 2

2
return newOption.attr('name', 'item[options][' + nextId(+']'));

将上面更改为

return newOption.attr('name', 'item[options][' + nextId +']');
于 2013-01-21T08:04:02.253 回答
0

如前所述,问题存在于最后一行:

newOption.attr 'name', 'item[options]['+ nextId +']'

问题是 CoffeeScript 将 nextId 视为一个函数。原因是 + 符号和 ']' 字符串之间没有空格。

添加空格如下:

newOption.attr 'name', 'item[options]['+ nextId + ']'

使一切按预期工作。这只是使用 CoffeeScript 需要注意的事情之一——由于大量的空白,事情并不总是像您第一次预期的那样工作。

于 2013-01-21T13:36:22.670 回答