1

我不确定为什么动态调用我的表单部分时没有调用Chosen Plugin 。

相对宝石 -

 rails, 3.1.0
 cancan, 1.6.7
 dynamic_form, 1.1.4
 simple_form, 2.0.1
 jquery-rails

设想 -

我有一个名为的页面/index,您可以添加一个House,DogCat. 该页面一开始是空白的,但侧面有链接,您可以单击这些链接以动态调出其中一个表单。这些形式是它们自己的部分。

狗控制器

def new
 @dog = Dog.new

 respond_to do |format|
  format.js
 end
end

狗/_form.html.erb

<%= simple_form_for(@dog, :remote => true, :html => { :class => 'form-horizontal span8' }) do |f| %>
  <%= render :partial => "shared/error_message", :locals => { :f => f } %>
     <%= f.association :house, :prompt => "Select a House", :input_html => { :id => "house-select", :class => "span4" } %>
  <%= f.button :submit, 'Done', :class => 'btn-primary span2' %>
<% end %>

页面控制器

def index
  @cats = current_user.cats.all
  @dogs = current_user.dogs.all

  respond_to do |format|
    format.html
  end
end

页面/index.html.erb

<li><%= link_to "Dog", new_dog_path, :remote => true %></li>
<li><%= link_to "Cat", new_cat_path, :remote => true %></li>

<div id="generate-form">
  <div class="ajax-loader"></div>
</div>          

狗/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");

所有这些代码都成功地在单击链接时显示所选表单。我的狗模型和猫模型一样。这些是选择插件问题的问题。现在为什么在任何一种形式出现时都没有检测到 Chosen 插件?

回答

狗/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");
$('.house-select').chosen();
4

1 回答 1

5

我在您的代码示例中没有看到对所选插件的任何调用,但我遇到了同样的问题。

初始调用$('.chzn-select').chosen()将应用于当时页面上的所有 DOM 元素,但不适用于稍后添加的元素。

要将插件添加到.house-select通过 AJAX 插入的新元素中,请将其添加到 dogs/new.js.erb 的末尾:

$('#generate-form .house-select').chosen();

值得注意的是,您可以在选择框上多次安全地运行 jQuery .chosen() 函数。它添加了自己的 css 类来跟踪选择应用的类,并在连续运行时优雅地忽略它们。

于 2012-06-16T19:33:37.410 回答