Заполните начальное значение на select2 ajax rails

Я изо всех сил пытаюсь заставить это работать

У меня есть форма рельсов, которая выглядит вот так

%tr
  %td
    = f.label :company
  %td
    = f.hidden_field :companyid, class: 'select2 ajax', data: { source: companies_path }

внутри моего кофе js

  $(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

person user1320651    schedule 31.08.2014    source источник


Ответы (1)


Чтобы установить начальное значение, установите значение непосредственно в скрытом поле во время загрузки страницы.

%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 / значение разделена запятой. Мой - это раскрывающийся список с несколькими вариантами выбора. Вы можете изменить это для раскрывающегося списка с одним выбором, как показано ниже:

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

Ключевым моментом здесь является то, что вам нужно вызвать метод обратного вызова с объектом данных, для которого вы хотите его установить.

person Lenin Raj Rajasekaran    schedule 31.08.2014
comment
Хорошо, в контексте моей отправной точки не могли бы вы изменить код, чтобы показать единственную версию? - person user1320651; 31.08.2014
comment
добавлена ​​версия кода, которая работает с раскрывающимся списком с одним выбором - person Lenin Raj Rajasekaran; 31.08.2014