如何更新Select2 4.0集合选择选项

时间:2015-05-30 20:13:14

标签: javascript jquery ruby-on-rails jquery-select2

我为客户提供了collection_select,可以选择使用模式添加新客户端。我希望select2 collection_select能够使用新客户端进行更新,并将值设置为新添加的客户端。

在父表单中,我有:

<%= f.collection_select :client_id, @clients, :id, :name, { label: 'Client', prompt: true, autofocus: true, required_flag: true }, { class: 'form-control js-example-basic-single', autofocus: true } %>
<div class='form-group'>
  <%= link_to 'Add a New Client', '#new_client_modal', 'data-toggle' => 'modal' %>
</div>

在客户控制器中我有:

@clients = Client.where(account_id: current_account.id)
format.html { redirect_to client_url(@client) }
format.js   { render action: 'show', status: :created, location: @client }

在show.js.erb中我有:

$('#new_client_modal').modal_success();
$(".js-example-basic-single").val("<%=j @client.id.to_s %>").trigger("change");
<% flash.each do |type, message| %>
  $('#flash_messages').html("<%=j render 'layouts/error' %>")
<% end %>

我们的想法是关闭添加客户端模式,然后使用新的@clients`选项更新select2集合选择。希望用@clients更新集合选择并将值设置为@client。

请注意,我使用的是select2版本4.0。

1 个答案:

答案 0 :(得分:0)

可能是一个更好的方法,但这就是我最终的结果:

#define PUT(p, val) (*(unsigned long *)(p) = (val))
#define SET_NEXT_PTR(p, ptr) (*(char**)(p) = (char*)((unsigned long)(ptr)))

data命令将最近添加的客户端添加到下拉列表中,但位于底部。理想情况下,我必须删除下拉选项,然后添加完整的客户端列表。目前,这是有效的,因为将所选值设置为最近添加的客户端。