我正在尝试在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(+']'));
});
似乎对我好。
答案 0 :(得分:2)
return newOption.attr('name', 'item[options][' + nextId(+']'));
将上述内容更改为
return newOption.attr('name', 'item[options][' + nextId +']');
答案 1 :(得分:0)
如上所述,问题存在于最后一行:
newOption.attr 'name', 'item[options]['+ nextId +']'
问题是CoffeeScript将nextId视为一种功能。原因是+符号和']'字符串之间没有空格。
按如下方式添加空格:
newOption.attr 'name', 'item[options]['+ nextId + ']'
让一切按预期工作。只是其中一件需要对CoffeeScript保持警惕的事情 - 由于重要的空白,事情并不像你期望的那样总是有效。