1

Rails と jquery を RJS テンプレートと共に使用して、さまざまな AJAX 要求を実行しています。

私の Ajax のほとんどについて、次のように application.js のフォームに送信ハンドラーをアタッチします。

$('#tagging_flickr_photos').submitWithAjax();
$('#tag_submit').click(function() {
    $('#flickr-photos-status').show();

});

これは、いくつかの処理を行うフォーム アクションを呼び出してから、次のように RJS テンプレートに転送します。

$("#flickr-photos-status").hide();
$("#flickr-photos").fadeIn();
$("#flickr-photos").html("<%= escape_javascript(render(:partial => 'flickr_photos_for_tagging_content')) %>");

これは御馳走になります。

今、私は同じことをしようとしていますが、ドロップダウンで別の値を選択し、フォームを送信しないことに基づいています。ハンドラーをドロップダウンにアタッチするための私の JavaScript は次のとおりです。

$('#film_film_name_id').change(function() {
    $.get('/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val());
});

私のコントローラー メソッドは、いくつかの処理を行ってから、RJS テンプレート (make_tags.js.erb) に転送します。

$("#film_tags").val(<%=@tags%>)

ただし、テンプレートは実行されていないようです。ログに、メソッドを呼び出してテンプレートをレンダリングしているというエントリが表示されますが、テンプレートに何を入れても何も起こらないようです。そこに Javascript アラートを入れましたが、起動しません。

問題は Javascript ハンドラーのアタッチに関係していると思いますが、何が欠けているのかわかりません。

助けてくれてありがとう。

4

4 に答える 4

5

JavaScript が必要であり、それを実行する必要があることを jQuery に伝える必要があると思います。以下を試して、動作するかどうかを確認してください。

$('#film_film_name_id').change(function() {
  var url = '/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val()
  $.ajax({
    type: 'GET',
    dataType: 'script',
    url: url
  });
});

コードをテストしていないために機能しない場合は、 jQuery.ajax()の jQuery ドキュメントを確認してください。

于 2009-05-25T15:00:58.297 に答える
1

こんにちは、

プロトタイプ ライブラリ (jquery ではない) を介して直接呼び出すオブザーバーを使用しています。

        <td><div id="outconditionnals_container">
                <% if !@milestone.howto.conditionnals.nil? then %>
                        <%= collection_select(:OUTconditionnal, :id, @milestone.howto.conditionnals, :id, :name, {:prompt => true}, {"index" => @outconditionnalID.to_s}) %>
                        <%= observe_field("OUTconditionnal_"+@outconditionnalID.to_s+"_id",
                                :url => { :action => :AJAX_selection_change },
                                :with => "'id='+value+'&dir=out&type=conditionnal&milestoneID="+@milestone.id.to_s+"'",
                                :on => "changed")%>                         
                <% end %>
            </div>
        </td>

次に、rjs がアクションからレンダリングされ、他のフォーム要素が参照されます。

お役に立てれば。

于 2009-05-25T13:32:35.087 に答える
0

jQuery メソッドgetScriptは、上で ujh が推奨したことを行うための便利な省略形です。

于 2010-10-18T21:20:36.327 に答える
0

あるいは、これまで使用してきた$.getを使用することもできます。
髪型の例を次に示します。

$('#film_film_name_id').change(function() {
    $.get(
      '/admin_film/make_tags', // or something like '<%= make_tags_admin_film_path %>'
      {
        film_name_id: $("#film_film_name_id").val(),
        film_speed_id: $("#film_film_speed_id").val()
      },
      null, // you may define an additional callback here, if that makes sense
      "script"
    );
});
于 2010-04-09T10:28:16.253 に答える