JQuery автозаполнение умножается с удаленными данными через Rails - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь настроить автозаполнение jQuery в Rails 3.2.0. У меня это работает нормально, если я настроил массив в javascript в качестве источника данных. Моя проблема в том, что поисковых терминов со временем станет слишком много для загрузки во время загрузки страницы. Я пытаюсь настроить удаленный источник данных, но он не может заполнить содержимое на странице.

Данные возвращаются, но выборки не заполняются. Подавляющее большинство этого кода прямо с демонстрационного сайта jQuery UI.

Чего мне не хватает?

$( "#tags" )
    // don't navigate away from the field on tab when selecting an item
    .bind("keydown", function( event ) {
        if ( event.keyCode === $.ui.keyCode.TAB &&
          $( this ).data( "autocomplete" ).menu.active ) {
              event.preventDefault();
          }
     })
     .autocomplete({
         source: function( request, response ) {
             $.getJSON( "get/tags", {
                 term: extractLast( request.term )
             }, response.name );

          },
          search: function() {
              // custom minLength
              var term = extractLast( this.value );
              if ( term.length < 2 ) {
                  return false;
              }
          },
          focus: function() {
              // prevent value inserted on focus
              return false;
          },
          select: function( event, ui ) {
              var terms = split( this.value );
              // remove the current input
              terms.pop();
              // add the selected item
              terms.push( ui.item.value );
              // add placeholder to get the comma-and-space at the end
              terms.push( "" );
              this.value = terms.join( ", " );
              return false;
          }
      });

1 Ответ

1 голос
/ 05 апреля 2012

Я нашел свою проблему.Дурак я.Чтение ВСЕЙ документации по плагину автозаполнения полезно.Моя проблема заключалась в том, что я не предоставлял правильный «названный» массив JSON.

Цитируется из jQuery UI page

Массив объектов со свойствами меток и значений:[{label: "Choice1", value: "value1"}, ...]

Таким образом, создание рендеринга JSON в вашем приложении Rails выглядит так:

def get_tags
    @tags = Tag.where(['name LIKE ?', "#{params[:term]}%"])
    @tags_hash = []

    @tags.each do |tag|
      @tags_hash << { label: tag.name }
    end

    render json: @tags_hash
end

Также в моем кодевыше $ .getJSON должен быть определен так:

$.getJSON( "get/tags", {
    term: extractLast( request.term )
    }, response );
...