2014-08-31 3 views
5

Im изо всех сил, чтобы получить эту работузанесения начальное значение на ВЫБ.2 АЯКС рельсам

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

%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 

ответ

2

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

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

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

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

+0

ОК, в контексте моей отправной точки вы могли бы изменить код, чтобы показать одну версию? – user1320651

+0

добавлена ​​версия кода, которая работает с одним выпадающим списком – emaillenin

Смежные вопросы