Объект ошибки RJS не поддерживает это свойство при обновлении элемента

У меня есть следующий код в контроллере. Я динамически заполняю раскрывающийся список на основе выбора из другого раскрывающегося списка.

def  update_releases 
  project = Project.find(params[:project_id]) 
  releases = project.releases
  puts "releases==#{releases}" 
  render :update do |page| 
  page.replace_html 'releases', :partial => 'releases', :object => releases 
end 

код просмотра:

-form_tag reports_path(report_type=1),:method => :get, :multipart => true ,:id => "filter" do  
%table.grid.full
%tr      
  %td.grid.full_panels{:style => "width: 20%"}
    Project:
  %td.grid.full_panels{:style => "width: 20%"}
    //= select_tag "projects",options_from_collection_for_select(projects,"id","name",params[:projects]),{:onchange => "#{remote_function(:url  => {:action => "update_releases"},:with => "'project_id='+value")}"} 
    = select_tag "projects",options_from_collection_for_select(projects,"id","name",params[:projects]), :class => "update_releases"


  %td.grid.full_panels{:style => "width: 20%"}
    Releases:
  %td.grid.full_panels{:style => "width: 20%"}
    <div id="releases">
    = render :partial => 'releases', :object => @releases
  %td.grid.full_panels{:style => "width: 20%"}
    Cycles:
  %td.grid.full_panels{:style => "width: 20%"}
    <div id="cycles">
    = render :partial => 'cycles', :object => @cycles

%tr      
  %td.grid.full_panels{:style => "width: 20%"}
  %td.grid.full_panels{:style => "width: 20%"}
  %td.grid.full_panels{:style => "width: 20%"}
    =submit_tag "Submit"

= javascript_include_tag "pages/ic"

частичный код: = select_tag "релизы", options_from_collection_for_select (релизы, "идентификатор", "имя", параметры [: релизы])

Jquery: // изменить раскрывающийся список выпусков в зависимости от выбора раскрывающегося списка проектов.

$('.update_releases').live("change", function(){
  $.ajaxSetup({beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content")); }});
  var project_id=($(this).val());
  $.post('/reports/update_releases', {project_id: project_id});
 return false;
})

Я получаю сообщение об ошибке, которое элемент не поддерживает это свойство» в виде всплывающего окна при изменении выбора в раскрывающемся списке. Пожалуйста, помогите мне здесь.


person ramya    schedule 19.10.2011    source источник
comment
1. Где определяется cycles? 2. Добавьте код просмотра, чтобы увидеть полную картину.   -  person Mark Huk    schedule 19.10.2011
comment
Привет, Марк, я добавил полный код. Также, пожалуйста, дайте мне знать, нужно ли внести какие-то изменения в jquery для включения page.replace_html.   -  person ramya    schedule 19.10.2011
comment
Используйте #releases вместо <div id="releases">. : Похоже, ваш HAML недействителен. Проверьте вывод HTML на стороне клиента, присутствуют ли релизы и циклы div.   -  person Mark Huk    schedule 21.10.2011
comment
Релизы и циклы присутствуют. Replace_html использует прототип. Может ли кто-нибудь сообщить мне соответствующий метод jquery для этого   -  person ramya    schedule 21.10.2011
comment
replace_html — метод RJS. Он компилирует ваш ruby ​​в JS. Если вы настроите прототип как серверную часть RJS, тогда будут использоваться методы прототипа и то же самое для jQuery. Что касается замены html: см. метод html() на [api.jquery.com/html/] (api.jquery.com/html)   -  person Mark Huk    schedule 21.10.2011


Ответы (1)


В качестве простого обходного пути попробуйте использовать этот код в контроллере:

respond_to do |format| 
  format.js render :partial => 'releases', :locals { :releases => releases }
end

In releases.js.haml:

   $('#releases').html('#{render :partial => '<some_old_html_partial>', :locals => {:releases => releases}}')
person Mark Huk    schedule 21.10.2011
comment
Привет вместо ‹some_old_html_partial› что нужно указать. - person ramya; 01.11.2011
comment
Привет, вместо ‹some_old_html_partial› должно быть имя шаблона для отображения, которое должно заменить существующий HTML на клиенте. Например, «релизы» (как в вашем посте). Не забывайте использовать правильные имена, так как будут релизы.**js**.haml и релизы.**html**.haml, и вы будете ответственны за то, чтобы указать Rails, какой шаблон отображать (либо сказав визуализировать :file =› '‹полное имя шаблона с .html.haml›' или другим способом). - person Mark Huk; 01.11.2011