Использование jquery tokeninput и act_as_taggable_on

Я реализовал структуру, описанную в этом сообщении: Как использовать jquery-Tokeninput и Acts-as-taggable-on с некоторыми трудностями. Это работает, поскольку предварительно заполняется соответствующей темой и поиском ajax, но когда я ввожу новый тег, он сразу же удаляется, когда текстовая область теряет фокус. Я не уверен, что я делаю неправильно. Вот некоторые из моих соответствующих кодов:

Модель пользователя (делает теги):

class User < ActiveRecord::Base
[...]
# tagging
acts_as_tagger

Модель предмета (принимает тег):

class Item < ActiveRecord::Base
attr_accessible :title, :tag_list

#tagging functionality
acts_as_taggable_on :tags

Контроллер предметов:

def tags 
@tags = ActsAsTaggableOn::Tag.where("tags.name LIKE ?", "%#{params[:q]}%") 
 respond_to do |format|
  format.json { render :json => @tags.collect{|t| {:id => t.name, :name => t.name }}}
 end
end

В моей частичной форме:

<%= f.input :tag_list, :label => "Tags", :input_html => { :class => "text_field short", "data-pre" => @item.tags.map(&:attributes).to_json }, :hint  => "separate tags by a space"  %>

мои маршруты:

get "items/tags" => "items#tags", :as => :tags
resources :items 

[почти готово!!!]

js в форме [примечание: идентификатор элемента назначается динамически]:

<script type="text/javascript">
$(function() {
  $("#item_tag_list").tokenInput("/art_items/tags", {
    prePopulate:       $("#item_tag_list").data("pre"),
    preventDuplicates: true,
    crossDomain: false,
    theme: "facebook"
  });
});
</script>

person panzhuli    schedule 21.11.2011    source источник
comment
Когда вы имеете в виду ввод нового тега, он сразу же удаляется, когда текстовая область теряет фокус, вы имеете в виду после выбора тега из раскрывающегося списка правильно? Или вы имеете в виду, что когда вы просто хотите создать новый тег внутри поля, он исчезает?   -  person LearningRoR    schedule 08.12.2011
comment
так что поле является текстовым полем ввода. он будет автоматически заполняться существующими записями по мере ввода пользователем. Я хотел, чтобы он добавлял запись в список тегов, если не находил ее, но этот плагин этого не делает. Сейчас я изучаю другие варианты UX. Спасибо за регистрацию!   -  person panzhuli    schedule 09.12.2011
comment
Np, я дал свои пять копеек на случай, если вы решите вернуться к TokenInput в будущем.   -  person LearningRoR    schedule 09.12.2011


Ответы (1)


Если вы все еще хотите использовать Jquery TokenInput и добавлять теги, есть разные способы сделать это.

1. На самом деле это из моего же вопроса; самый новый ответ: Как использовать jquery-Tokeninput и действия -как-помечаемый-на

Это может войти в ваш контроллер.

 def tags
    query = params[:q]
    if query[-1,1] == " "
      query = query.gsub(" ", "")
      Tag.find_or_create_by_name(query)
    end

    #Do the search in memory for better performance

    @tags = ActsAsTaggableOn::Tag.all
    @tags = @tags.select { |v| v.name =~ /#{query}/i }
    respond_to do |format|
      format.json{ render :json => @tags.map(&:attributes) }
    end
  end

This will create the tag, whenever the space bar is hit.

You could then add this search setting in the jquery script:

noResultsText: 'No result, hit space to create a new tag',

It's a little dirty but it works for me.

2. Ознакомьтесь с методом этого парня: https://github.com/vdepizzol/jquery-tokeninput

Он сделал пользовательскую способность входа:

$(function() {
  $("#book_author_tokens").tokenInput("/authors.json", {
    crossDomain: false,
    prePopulate: $("#book_author_tokens").data("pre"),
    theme: "facebook",
    allowCustomEntry: true
  });
});

3. Не уверен в этом, но это может помочь: Rails: использование jquery tokeninput (railscast #258) для создания новых записей


4. Это тоже кажется законным: https://github.com/loopj/jquery-tokeninput/pull/219

Мне лично нравится первый, кажется, проще всего получить и установить.

person LearningRoR    schedule 09.12.2011