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 で注意すべき点の 1 つにすぎません。空白が多いため、最初は期待どおりに動作しないことがあります。

于 2013-01-21T13:36:22.670 に答える