Запуск RJS-шаблона rails из запроса на получение jquery - PullRequest
1 голос
/ 25 мая 2009

Я использую 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 ]

5 голосов
/ 25 мая 2009

Я думаю, вы должны сообщить jQuery, что вы ожидаете JavaScript и что он должен быть выполнен. Попробуйте следующее и посмотрите, работает ли оно:

$('#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 на jQuery.ajax () , если она не работает, поскольку я не тестировал код.

1 голос
/ 25 мая 2009

HI

Я использую обозреватель, который вызывает напрямую через библиотеку прототипов (не 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 визуализируются из моего действия для ссылки на некоторые другие элементы формы.

Надеюсь, это поможет.

0 голосов
/ 19 октября 2010

Метод jQuery getScript является хорошим сокращением для выполнения того, что рекомендовано ujh выше.

0 голосов
/ 09 апреля 2010

В качестве альтернативы, вы также можете использовать $. 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"
    );
});
...