rails автозаполнение тегов через запятую с помощью регулярных выражений - PullRequest
7 голосов
/ 20 декабря 2010

Я использую старый плагин auto_complete в сочетании с действует как тегируемый на геме в попытке в основном повторить поведение тегирования самого переполнения стека! Я более или менее делаю то, что описано в этом рельсах . Для отдельных тегов это прекрасно работает. Однако мне бы очень хотелось, чтобы каждый раз, когда пользователь вводил пробел или запятую (как при переполнении стека), автозаполнение начиналось заново. Я мог бы предположить, что есть какой-то способ сделать это с помощью регулярных выражений, но я не уверен, как применить это поведение к text_field (я представляю себе использование JavaScript для «перезапуска» автозаполнения, но по общему признанию я довольно слаб когда дело доходит до JavaScript. Вот как выглядит мой взгляд:

<%= text_field_with_auto_complete :business, :tags, {}, { :url => formatted_businesses_path(:js), :method => :get, :with => "'search=' + element.value" } %>

Мой контроллер очень прост, просто сохраняя теги для этого конкретного бизнеса.

Если бы кто-то мог указать мне правильное направление (поскольку я не уверен, как это сделать), я был бы очень признателен.

Ответы [ 2 ]

10 голосов
/ 14 июля 2011

Я знаю, что это старый, но для воссоздания этого поведения я использовал rails3-jquery-autocomplete с actions-as-taggable-on . Они работают очень хорошо и легко вместе.

// Model
class Foo < ActiveRecord::Base
  acts_as_taggable_on :tags
end

// Controller
class FoosController < ApplicationController
  autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag'
  ...
end

// Routes
resources :foos do
  collection do
    get :autocomplete_tag_name
  end
end

//View
<% form_for :foo do |form| %>
  <%= form.label :tag_list, "Tags" %>
  <%= form.autocomplete_field :tag_list, autocomplete_tag_name_foos_path, :"data-delimiter" => ', ' %>
<% end %>

Надеюсь, это кому-нибудь поможет.

1 голос
/ 04 мая 2011

Я бы посмотрел опции для помощника text_field_with_auto_complete.Если это не поддерживает то, что вам нужно, я бы отказался от этого в пользу того, что вы имеете больше контроля.Мой опыт работы с такими помощниками / плагинами заключается в том, что они экономят ваше время, только если вы делаете именно то, что от них ожидают.Если вам нужно что-то нестандартное, вы будете испытывать больше усилий, пытаясь обойти их, чем они стоят.

Чтобы отказаться от помощника text_field_with_auto_complete, посмотрите на HTML и JS, которые он генерирует на отображаемой странице.,Скопируйте и вставьте это, затем измените это, чтобы сделать то, что вам нужно.Вы все еще можете использовать контроллер на стороне плагина автозаполнения.

JS, который вы хотите разбить на запятую, будет выглядеть примерно так:

var tags = $('#myTextInput').value();
var splitTags = tags.split(/\w*,\w*/);

JS regexen очень похожик Руби.Это регулярное выражение разделится запятыми, съедая лишние пробелы.

...