【问题标题】:how to show modal window in controller's action?如何在控制器的操作中显示模态窗口?
【发布时间】:2016-06-14 18:30:10
【问题描述】:

所以我有控制器 PagesController 与操作索引和 full_search。动作索引用于主页。在主页上,我有“搜索”按钮和 text_field。如果用户在 text_field 中键入 sometiong 并单击“搜索”按钮,他/她将执行 full_search 操作。在此操作中,我尝试通过用户的查询来查找某些内容。如果我没有找到任何东西,我应该只显示一个“无结果”的模式窗口,否则会重定向到另一个页面

def full_search
  ...do search...
  if search_result.empty?
    show modal window with text 'no results'
  else
    redirect to another page
  end
end

如何显示模态窗口(如 js 中的函数警报)?我想我必须使用 javascript..但是在哪里???

如果 search_result 为空,我不需要渲染任何视图...我只需要停留在同一页面并显示模态窗口

【问题讨论】:

  • 您的页面上有模态框吗?没有内容,只有结构。喜欢<div class="modal...
  • 不,我没有

标签: javascript ruby-on-rails ruby


【解决方案1】:

第 1 步。

在您的渲染视图中,有一个 id 为“my_modal_content”的 div,其中将插入模态的内容并显示模态。

第 2 步。

渲染一个 js.erb 文件,它将模式附加到我们的页面

#your rails controller method
def my_method
  if something == true
    respond_to do |format|

      format.js { render :partial => 'somewhere/somefile.js.erb' }
      #I'm assuming its js request
    end
  else
    redirect to another page
  end
end

第 4 步。

像这样编写你的 js.erb 文件,它会附加模态然后显示它。

#_somefile.js.erb file

$("#my_modal_content").html("<%= escape_javascript(render 'somewhere/my_modal') %>");
$("#myModal").modal('show');

第 3 步。

模态部分文件 _my_modal.html.erb 放置在 views/somewhere/ 中,模态内容已准备就绪。

<div class="modal fade" tabindex="-1" id="myModal" role="dialog">
  <div class="modal-dialog">
    ...<!-- all your content insdie -->
  </div>
</div>

更新

如果您想显示警报,它非常简单。你只是渲染js

if search_result.empty?
  message = "No result found. Try something else!"
  respond_to do |format| 
    format.js { render js: "alert(#{message});" }
  end
else
  redirect to another page
end

【讨论】:

  • 我应该看看我的问题。我做了编辑。还是谢谢)
  • 您的搜索是否异步进行?
  • 您确定要显示模态框,还是只显示 javascript alert
  • 没有..(我用的是elasticsearch)
  • alert 会好的。
【解决方案2】:

您可以在控制器中保存具有 true 或 false 的变量: @var = true

然后在视图中使用javascript:

if (<%= @var%> == true) {
  alert("some text");
}

【讨论】:

  • 如果变量为真,我不需要渲染任何视图...我需要留在同一页面,只显示模态窗口
  • 然后将变量保存在当前视图页面的控制器方法中,而不是单独的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
相关资源
最近更新 更多