Использование RJS для замены Div - PullRequest
2 голосов
/ 04 июня 2009

У меня есть ссылка, которая при нажатии вызывает функцию JavaScript, которая собирает некоторые данные и затем использует ProtoType для отправки формы ...

function myFunction(){
  data = someobject.getData();
  $('myform').request({
    parameters: {data:data, id:id,},
    onSuccess: function(transport) { 
      document.location.reload();        
    }
  });  
}
...
<%= form_tag({:controller => "data", :action => "process"}, :id => "myform") %></form>

Обратите внимание на мой очень unAJAXy document.location.reload (); в обратном вызове onSuccess.

Я хочу, чтобы процесс DataController # делал это ...

def process
  ...
  render :update do |page|
    page.replace 'my_div', :partial => 'test'
  end
end

Может кто-нибудь подсказать мне, что мне нужно изменить в вызове JavaScript для page.replace для работы? Сейчас, конечно, это просто игнорируется.

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

Спасибо

Ответы [ 4 ]

2 голосов
/ 04 июня 2009

Возьмите рендеринг из контроллера и поместите его в views / datas / process.js.rjs

page.replace("my_div", :partial => "test")
0 голосов
/ 05 июня 2009

Спасибо за все предложения - вот что я в итоге сделал:

function myFunction(){
  ...
  $('data').value = data;
  $('id').value = id;
  $('myform').request();  
}
...
<%= form_remote_tag 
  :url => {:controller => 'data', :action => 'process' }, 
  :html => {:id => 'myform'}%>
     <input type="hidden" id="data" name="data"/>
     <input type="hidden" id="id" name="id"/>
</form>

В DataController # процесс для этого ...

def process
  ...
  render :update do |page|
    page.replace 'my_div', :partial => 'test'
  end
end

(парень - я поставлю это частично!)

0 голосов
/ 04 июня 2009

Вы можете изменить свою форму для этого:

<% form_remote_tag :url => {:controller => "data", :action => "process"},
                   :html => {:id => 'my_form'},
                   :update => 'my_form' do %>

А затем визуализировать частичное в контроллере, и оно обновит my_form:

def process
  ...
  render partial => 'test'
end
0 голосов
/ 04 июня 2009

Я не совсем уверен, как именно вы хотите, чтобы он работал, но есть тег remote_form_for, который выполнит запрос за вас. Также вы можете посмотреть ссылку ниже для примера использования шаблонов RJS:

http://www.developer.com/lang/article.php/3668331

...