Jquery 在select2 ajax rails上填充初始值

Jquery 在select2 ajax rails上填充初始值,jquery,ruby-on-rails,jquery-select2,Jquery,Ruby On Rails,Jquery Select2,我正在努力让它工作 我有一个rails表单,看起来像这样 %tr %td = f.label :company %td = f.hidden_field :companyid, class: 'select2 ajax', data: { source: companies_path } 在我的咖啡里面 $(document).ready -> $(".select2").each (i, e) -> select = $(e) o

我正在努力让它工作

我有一个rails表单,看起来像这样

%tr
  %td
    = f.label :company
  %td
    = f.hidden_field :companyid, class: 'select2 ajax', data: { source: companies_path }
在我的咖啡里面

  $(document).ready ->
   $(".select2").each (i, e) ->
    select = $(e)
    options = {}
    if select.hasClass("ajax")
      options.ajax =
        url: select.data("source")
        dataType: "json"
        data: (term, page) ->
          q: term
          page: page
          per: 10
        results: (data, page) ->
          results: data
      options.placeholder = "Select a value"
      options.dropdownAutoWidth = "true"
    select.select2 options
    return
搜索工作正常,数据存储也正常,但当我重新打开页面(即编辑保存的记录)时,我会得到一个空白的select2对象,没有默认值加载到选择框中

它不会从保存的记录中提取现有值,也不会显示该值。我可以搜索没有问题-这一切都好,它只是不工作

现在我已经使用InitSelection并尝试设置“val”,但它就是不起作用

将记录中存储的值加载到select2框的正确方法是什么

谢谢

来自emaillenin的解决方案见下文

$(document).ready ->
 $(".select2").each (i, e) ->
  select = $(e)
  options = {}
  if select.hasClass("ajax")
    options.ajax =
      url: select.data("source")
      dataType: "json"
      data: (term, page) ->
        q: term
        page: page
        per: 10
      results: (data, page) ->
        results: data
    options.placeholder = "Select a value"
    options.dropdownAutoWidth = "true"
    options.initSelection = (element, callback) ->
      data = {id: element.val().split('||')[0], text: element.val().split('||')[1]};
      callback data
  select.select2 options
  return

要设置初始值,请在加载页面时直接在隐藏字段上设置该值

%tr
  %td
    = f.label :company
  %td
    = f.hidden_field :companyid, value: "#{@company.id}||#{@company.name}", class: 'select2 ajax', data: { source: companies_path }
然后在javascript中,使用此值并设置正确的下拉值:

initSelection: (element, callback) ->
      data = []
      $(element.val().split(",")).each ->
        data.push
          id: this.split('||')[0]
          text: this.split('||')[1]
      $(element).val('')
      callback data
这里,我用| |分隔ID和值,用逗号分隔每个ID/值对。我的是多选下拉列表。您可以对单选下拉列表进行修改,如下所示:

initSelection: (element, callback) ->
      data = {}
      data.id = $(element).val().split('||')[0]
      data.text: $(element).val().split('||')[1]
      $(element).val('')
      callback data

这里需要注意的关键是,您需要使用要将其设置为的数据对象调用callback方法。

好的,在我的起点上下文中,您是否能够修改代码以显示单个版本?添加了一个使用single select下拉列表的代码版本