1

次のようなRailsアプリケーションの一部としてCoffeeScriptファイルがあります

    jQuery ->
      $ ->
        $('#secondthing').hide()

      $('#trips').change ->
        trips = $('#trip_quantity :selected').text()
        if trips == '1'
          $('#secondthing').hide()
        else
          $('#secondthing').show()

これで、trips の変更時に実行されるコードの一部が正常に機能するようになりました。ただし、ページがロードされた後に実行する必要があるコードの最初のビットは変更されません。ここからどこへ行けばいいのかわからない

4

2 に答える 2

1

コードに問題はないので、うまくいかない場合は、表示されていない部分に原因があるはずです。しかし、ここで明らかに人々を混乱させるいくつかのことを指摘しています。

まず、同じスコープでjQueryとの両方を使用する必要はありません。は単なるエイリアスであり、両方の名前が意味を持つ唯一のシナリオは、互換性の理由から (他のバージョンの jQuery または ショートカットとしても使用する他のライブラリと)、次のようにコードをモジュールにカプセル化する場合です。$$jQuery$

(function($) {
  // Now $ is bound to whatever object you pass in
})(jQuery);

$コード内でforを自由に置き換えることができることを考えるとjQuery、次の誤解は次のとおりです (1 行にまとめてあります)。

$ -> $ -> $("#foo").hide()

このスニペットは、DOM が読み込まれるとコールバックが実行されるようにスケジュールします。#fooこのコールバックは、DOM がロードされると非表示になるように別のコールバックをスケジュールします。2 番目のスケジュールは、DOM が既に読み込まれているときに実行されるため、実際にはすぐに実行されます。そのため、実際に使用する必要がある場合でも、

$ -> $("#foo").hide()

元のコードに余分な「レベル」があっても害はありません。実際、すべてが期待どおりに機能します。ところで、これはあなたのコードの最もコンパクトなバージョンです:

$ ->
  el = $("#secondthing")

  el.hide()

  $("#trips").change ->
    el[if $('#trip_quantity :selected').text() == '1' then "hide" else "show"]();
于 2013-03-09T16:09:02.980 に答える
1

2 行目の を削除してみてください$ ->

jQuery ->
  // $ ->
  $('#secondthing').hide()

  $('#trips').change ->
    trips = $('#trip_quantity :selected').text()
    if trips == '1'
      $('#secondthing').hide()
    else
      $('#secondthing').show()
于 2013-03-09T14:30:51.620 に答える