使用RJS替换Div

时间:2009-06-04 14:05:18

标签: ruby-on-rails prototype rjs

我目前有一个链接,点击后调用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 #process执行此操作...

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

任何人都可以指导我在调用JavaScript for page.replace工作时需要更改的内容吗?当然,现在它被忽略了。

我尝试了各种各样的东西,并且四处阅读,但在这种情况下,我无法得到我需要做的事情。

由于

4 个答案:

答案 0 :(得分:2)

从渲染器中取出渲染并将其放入views / datas / process.js.rjs

page.replace("my_div", :partial => "test")

答案 1 :(得分:0)

我不确定您希望它如何工作,但有一个remote_form_for标记可以为您处理请求。此外,您可能希望查看以下链接以获取有关使用RJS模板的示例:

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

答案 2 :(得分:0)

您可以将form_for更改为:

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

然后在控制器中渲染部分,它将用它更新'my_form':

def process
  ...
  render partial => 'test'
end

答案 3 :(得分:0)

感谢所有建议 - 这就是我最终做的事情:

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#process中执行此操作...

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

(小伙子 - 我会把它放在一边!)