2

我目前有一个链接,单击该链接会调用 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 中需要更改哪些内容才能使 page.replace 正常工作?当然,现在它只是被忽略了。

我尝试了各种方法,并四处阅读,但在这种情况下我没有得到我需要做的事情。

谢谢

4

4 回答 4

2

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

page.replace("my_div", :partial => "test")
于 2009-06-04T14:18:49.960 回答
0

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

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

于 2009-06-04T14:17:37.293 回答
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
于 2009-06-04T14:23:53.770 回答
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

(第一章 - 我会把它放在部分内容中!)

于 2009-06-04T20:33:02.307 回答