ruby-on-rails-3 - 渲染部分 Rails3.x + Coffeescript

标签 ruby-on-rails-3 jquery coffeescript

我有以下要求。我有一个“学校”下拉列表,作为最后一个选项,我添加了新学校,因此,如果用户选择该选项,我想通过 ajax 将 new_school 表单作为部分加载。

我在

gem 'rails', '3.2.9'
gem 'coffee-rails', '~> 3.2.1'
Jquery via gem 'jquery-rails'

之前我用rails < 3和原型(prototype)来做到这一点

Ajax.Updater (aka Rails link_to_remote :update => 'some_div') 

并且使用rails > 3 + JQuery我熟悉*.js.erb,并且有类似的东西

$("#school_form").html("<%= escape_javascript(render(:partial => "form"))%>");  

但是我是 coffeescript 的新手,我不知道如何使用 coffeescript 来做到这一点,有人可以帮助我吗:),(因为我相信你应该不必为此发出服务器请求)

到目前为止,我已完成以下操作来捕获 select_tag 更改事件

$ ->
  $('#school_name_select').change ->
    unless $(this).val()
      $('school_name').html([I want to have the _new_school_form partial here])

最佳答案

使用隐藏的 div。

一般来说,您不想尝试混合 JS 和 HTML。由于跨站点脚本攻击的可能性,转义可能很复杂、容易出错,而且非常危险。

只需在默认情况下不显示的 div 中渲染表单部分即可。在 ERB 中:

<div id="school_name_form" style="display: none;">
  <%= render 'form' %>
</div>

在你的 CoffeeScript 中:

$ ->
  $('#school_name_select').change ->
    if $(this).val()
      $('#school_name_form').slideUp()
    else
      $('#school_name_form').slideDown()

我建议使用小而有品味的过渡,例如幻灯片或淡入淡出。它给您的应用带来更精致的感觉。

不需要 AJAX。这种模式非常常见,因此我定义了一个应用程序范围的样式,如下所示。

.not-displayed {
  display: none;
}

然后使用 HAML(如果您喜欢的话),HTML 模板变得简单:

#school_name_form.not-displayed
  = render 'form'

关于ruby-on-rails-3 - 渲染部分 Rails3.x + Coffeescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586979/

相关文章:

javascript - jQuery 在 append 项目上单击操作

jquery - 如何将选定元素的多个实例包装到新的 <div> 中

ruby-on-rails - DBI::InterfaceError:无法加载驱动程序(未初始化常量 MysqlError)

ruby-on-rails - Ruby on Rails Instagram Gem 点赞和评论计数无法正常工作

ruby - 提交时在开发/QA 服务器上自动化 git pull 过程

jquery - 切换在 Angular ng-repeat 中无法正常工作

scope - 关闭范围未捕获? — CoffeeScript

javascript - 为什么 CoffeeScript 将类定义包装在闭包中?

javascript - CoffeeScript:可以重写得更简洁吗?

ruby-on-rails-3 - 编辑字段值后进行 Rails 自定义验证