проблемы с jquery-select2 и ошибкой проверки формы rails

0

Я использую плагин select2 jQuery в форме рельсов, чтобы выполнить автозаполнение в поле с несколькими полями. Все работает нормально, если на странице нет ошибок проверки. Если есть ошибка проверки (не связанная с этим элементом), то часть javascript получает пустой элемент и терпит неудачу при вызове JSON.parse.

Однако проверка с помощью хром-инструментов показывает, что данные формы имеют правильную информацию по услугам

services:[{"id":93,"text":"Old School"},{"id":94,"text":"Gels"}],93,94

Вот фрагмент представления

<%= f.label :services, "Services" %>
              <input name="services" type='hidden' id='services' data-values='<%= @services %>' value='<%= @selected_services %>' style="width: 100%"/>

Javascript выглядит так.

var initSel = function (element, callback) {
console.log("intiSel data BRFORE json parse", $(element).val());
try {
  var data = JSON.parse($(element).val());
  callback(data);
  console.log("intiSel data AFTER json parse", data);
} catch (e) {
  console.error("Parsing error:", e);
}

}

$(function() {
  $("#services").select2({
    initSelection: initSel,
    createSearchChoice: function(term, data) {
      if ( $(data).filter(function() {
        return this.text.localeCompare(term)===0;
      }).length===0) {return {id:term, text:term};}
    },
    multiple: true,
    data: function (){
      var data = $('#services').data('values');
      return {results:data};
    }
  });
});
Теги:
jquery-select2
select2-rails

1 ответ

0

У меня была такая же проблема, после ошибки проверки поля ввода select2 не смогли загрузить данные.

Я не уверен, что это поможет вашему делу, но может помочь другим пользователям стека с ошибкой select2 после проверки.

В моем случае ошибка исходила от контроллера. Я использовал фильтр before_action, чтобы получить переменные для подготовки параметров или данных для полей ввода select2.

Я понимаю, что я пропускал некоторые действия в моем фильтре, поэтому переменные больше не генерировались.

class MyController < ApplicationController
  before_action :prepare_data, only: [:edit, :update, :new, :create] #now I had all my actions not only edit and new for instance.

  private 

  def prepare_data
   @my_var_for_data_select2 = User.all.collect.collect{|u| u.username}
  end
end

Ещё вопросы

Сообщество Overcoder
Наверх
Меню