1

在谷歌搜索并为此伤脑筋了几个小时之后,我终于决定发布这个问题。这是代码...

view1.html.erb
-------------- 
<%=link_to_remote_redbox "Link", :url => {:action => :action1, :id => @some.id} 

some_controller.rb
------------------
def action1
  render :layout => false
end

def action2
  do some processing
end


action1.html.erb
--------------------
<form onsubmit="new Ajax.Request('/some_controller/action2', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">
<input type=text name='username'>
<input type='submit' value='submit'> 
</form>  

action2.rjs
-----------
page.replace_html("some_div", (render(:partial => "some_partial")))

当 action2.rjs 启动时,使用该代码应该显示 html 页面,而不是我得到这个

Element.update("some_div", "<style type=\"text/css\">\n\n..............

正如我阅读的其他帖子所建议的那样,他们说这是由于 link_to_remote_redbox 函数中的“:update => some_div”引起的,但显然我的代码没有。

帮助总是受到赞赏。非常感谢

4

3 回答 3

0

尝试以下: -

def action2
  render :update do|page|
    page.replace_html, 'some_div', :partial => 'some_partial'
  end
end

或者

<form onsubmit="new Ajax.Request('', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">
于 2010-04-06T14:20:34.563 回答
0

如果你想从浏览器调用返回一个 ajax 调用,Salil 的方法会起作用。但如果你想调用更复杂的 javascript(这在你的控制器中可能很乱),你可以这样做:

def action2
  ...some code
  respond_to do |format|
    format.js
  end
end

这将明确告诉 rails 返回 javascript 而不是 html。如果您使用 jQuery 而不是 RJS,这也很有用。

干杯!

于 2010-04-06T14:24:44.930 回答
0

确保布局包含默认的 javascript 文件。换句话说:

于 2010-04-06T14:11:58.307 回答