【问题标题】:Opening a new browser tab from rails action in the controller从控制器中的 rails 操作打开一个新的浏览器选项卡
【发布时间】:2011-07-04 02:24:52
【问题描述】:

所以我有一个考试控制器。现在它的文件上有一个 jqgrid (index.html.erb)。单击网格行,我已经设置了用于处理事件的 javascript。 看起来像

<script type= "text/javascript">
function handleSelection(id) {
    <%=  
    remote_function :url => render_exam_exams_path,:with => "'id='+id" 
    %>
}
</script>

现在我刚刚测试的方法如下

def render_exam
    @exams = Exam.find(params[:id])
    #either
    #redirect_to home_index_path
    #or open this in new browser tab        
    #render :action => "render_exam"
end

我也有一个叫做 render_exam 的视图。现在我检查了服务器日志,一切正常,即使生成了 render_exam,我可以在 chrome 开发人员插件中看到。现在的问题是我想要

  1. 控制器操作 render_exam 打开一个新选项卡并渲染 render_exam 视图,因为它似乎是远程发生的(生成 render_exam 视图和所有),而无需更改 jqgrid 页面。但是我找不到一种方法来打开一个新的浏览器选项卡来从 render_exam 操作本身呈现 render_exam 操作视图,而不是在幕后发生。 或
  2. 将 jqGrid(或索引视图)页面重定向到 render_exam 视图。现在这里的问题是 redirect_to 操作在视图中不起作用,因为它应该是控制器方法。所以我不能说。

<script type= "text/javascript">
function handleSelection(id) {
    <%= redirect_to :action => render_exam_exams_path, :with => "'id='+id"  %>
}
</script>

否则问题就解决了。 任何帮助表示赞赏 谢谢

【问题讨论】:

  • 我也需要这样做。您是否找到了从 Rails 控制器打开新选项卡的方法?

标签: ruby-on-rails-3 rendering


【解决方案1】:

首先,您不能在同一个操作中重定向和呈现,因为每个操作只有一个响应。第二个打开一个新选项卡是一个客户端功能(由您的浏览器控制),您需要在链接中使用类似 ""target=_blank 的内容,这将打开一个新的浏览器,进而请求一个页面(在您的情况下为 render_exam_exams_path)来自服务器。

【讨论】:

  • 您好,感谢您的回复,我的意思是我希望控制器操作 render_exam 打开一个新选项卡并呈现它的操作。因为即使处理了事件,并且从同一考试控制器的索引页面远程发送了操作 render_exam。或者,如果至少将用户重定向到单击时查看 render_exam,这是它现在没有做的事情,因为再次从处理的事件远程发送操作。我不能使用 target=_blank,因为它是对 jqgrid 的单击将由进行远程调用的 javascript 处理的行。
  • 如果您的目标是在新窗口中呈现结果,那么“远程调用 javascript”有什么意义?这就是 target=_blank 所做的 - 它不会更改当前页面(与远程调用 javascript 的目标相同),而是根据您的需要创建一个具有所需请求响应的新窗口。也许我们不了解您的目标?
猜你喜欢
  • 2014-02-18
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2011-07-28
  • 2012-02-10
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多