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>