代码之家  ›  专栏  ›  技术社区  ›  Spätzle

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

  •  0
  • Spätzle  · 技术社区  · 8 年前

    说我有个目标 s 由 Student 模型此对象有许多属性,包括相关的 scores 对象里面 show 与之相关的视图 s ,有一个按钮可以打开这个学生的 分数 使用在新窗口中查看 button_to :

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

    现在,有一种情况是,一个学生还没有拿到所有的分数,我不希望 分数 视图打开。这是通过在控制器中使用一个条件来完成的:Checking @s.scores.valid? ,如果是,则继续,否则不显示 分数 视图,它会打开一个弹出窗口,显示当前视图和我发出的警告消息:

    def show_scores
        @s = Student.find(params[:student])
        @s.calc_response_scores_if_missing
        if(@s.scores.valid?)
            redirect_to students_path, flash: {alert: I18n.t("students.missing_obs")} and return
        end
        @format = "html"
        respond_to do |format|
          format.html
        end
      end
    

    我想更进一步:我想在点击按钮时 @s、 得分。有效的 情况将得到检查。如果是肯定的,则继续在弹出窗口中打开视图,如果是否定的,则我不希望弹出窗口打开,并且警告显示在当前页面上(显然使用 render 而不是 redirect_to ).我认为这可以通过 remote: true 但我不太确定怎么做。任何帮助都很好:)

    2 回复  |  直到 8 年前
        1
  •  0
  •   bo-oz    8 年前

    我想你已经可以在第一次观看时做到这一点了。根据条件,渲染触发正确用户体验的按钮。所以在伪代码中:

    显示html。雇员再培训局

    <%=
    @s.scores.valid? ? "render button that opens popup" : "render button that does something else"
    %>
    
        2
  •  0
  •   narze    8 年前

    不使用ajax的最简单方法( remote: true 正在弹出“得分无效”消息和关闭窗口的按钮,或者只是用JavaScript代码来渲染空白页面以立即关闭窗口(脸谱网使用这种技术与登录按钮一起使用)。

    <script>
      window.close();
    </script>
    

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

    推荐文章