Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails使用remote:true控制弹出窗口_Javascript_Ruby On Rails_Ruby_Ajax_Helpers - Fatal编程技术网

Javascript Rails使用remote:true控制弹出窗口

Javascript Rails使用remote:true控制弹出窗口,javascript,ruby-on-rails,ruby,ajax,helpers,Javascript,Ruby On Rails,Ruby,Ajax,Helpers,假设我有一个由Student模型定义的对象s。此对象有许多属性,包括相关的分数对象。在与s相关的show视图中,有一个按钮,可在新窗口中使用按钮打开该学生的分数视图: <%= button_to t("s.show_scores"), show_scores_path(s: s.id), method: :get, 'data-popup' => true, form: {class: 'button-up'} -%> 我想更进一步:我想在点击按钮后,检查@s.scores.

假设我有一个由
Student
模型定义的对象
s
。此对象有许多属性,包括相关的
分数
对象。在与
s
相关的
show
视图中,有一个按钮,可在新窗口中使用
按钮打开该学生的
分数
视图:

<%= button_to t("s.show_scores"), show_scores_path(s: s.id), method: :get, 'data-popup' => true, form: {class: 'button-up'} -%>

我想更进一步:我想在点击按钮后,检查
@s.scores.valid?
条件。如果为正,则继续在弹出窗口中打开视图;如果为负,则我不希望打开弹出窗口并在当前页面上显示警报(显然使用
呈现
,而不是
重定向到
)。我认为这可以通过
remote:true
实现,但我不太确定如何实现。任何帮助都会很好:)

我认为您可以在第一次加载show view时就这样做。根据条件,渲染触发正确用户体验的按钮。所以在伪代码中:

show.html.erb

<%=
@s.scores.valid? ? "render button that opens popup" : "render button that does something else"
%>


最简单的方法是不使用Ajax(<代码> Real:Trime< /Cord>)正在弹出“得分无效”消息和关闭窗口的按钮,或者只是用JavaScript代码来渲染空白页面以立即关闭窗口(脸谱网使用这类技术的登录按钮)。


window.close();

不过,我不推荐使用弹出式方式,您可以使用ajax重新呈现部分视图,或者打开jQuery(或您正在使用的任何js库)弹出式窗口。

是的,这可以通过使用
ajax
实现。另外,您可以在视图中添加条件
if-else
,以及当
@s.scores.valid?
渲染
按钮到t(“s.show\u scores”),show\u scores\u路径(s:s.id)…
,否则渲染未链接按钮,该按钮具有相同的名称,并且只需通过js单击即可显示消息。这要求我将逻辑放入视图中,我尽量避免。我也喜欢这个按钮在任何时候都显示。它将在任何时候都显示,只是它触发的功能可能不同。你可以使用一个特殊的类,这样你就可以通过JS捕捉点击。此外,视图中的某些逻辑也没有问题。您始终可以使用ViewPresentor或其他工具对其进行重构:
<%=
@s.scores.valid? ? "render button that opens popup" : "render button that does something else"
%>
<script>
  window.close();
</script>