Rails 带着疑惑分享一个关于 remote: true 的技巧

jay_li · 2013年10月24日 · 最后由 smallX 回复于 2013年10月24日 · 2649 次阅读

在设置 i18 多语言时,希望通过 ajax 的方式重置 I18n.locale 来实现切换显示语言,form 已经设置为 remote: true,是通过 select 选择变化时自动提交。

但提交格式总是:html,一直没解决,索性添加了隐藏的 submit_tag,select 变化时触发 submit_tag 点击,这才实现了提交格式为:js

旧代码

<%= form_tag(i18_path(), :remote => true, style: "margin:0px;") do %>
   <span style="color:darkgray;"><small><%= t("layout.lang") %></small></span>
   <%= select_tag("locale",options_for_select([[t("lang.english"),"en"],[t("lang.chinese"),"zh-CN"]], I18n.locale),
     { class: "chosen-select", onchange: "this.form.submit()" }) %>
 <% end %>

新代码

<%= form_tag(i18_path(), :remote => true, style: "margin:0px;") do %>
   <span style="color:darkgray;"><small><%= t("layout.lang") %></small></span>
   <%= select_tag("locale",options_for_select([[t("lang.english"),"en"],[t("lang.chinese"),"zh-CN"]], I18n.locale),
     { class: "chosen-select", onchange: "$('#i18_btn').trigger('click');" }) %>
   <%= submit_tag "", id: "i18_btn", style: "display:none;" %>
 <% end %>

那位了解其中道理的朋友帮忙解释一下,顺便说一下如何通过原来的方式实现:js 提交?

毕竟触发 submit_tag 的方式太罗嗦了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号