3

この投稿で概説されているフレームワークを実装しました: 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 [注: 要素の ID は動的に割り当てられます]:

<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>
4

1 に答える 1

3

それでもJqueryTokenInputを使用してタグを追加する場合は、さまざまな方法があります。

1.これは実際には私の同じ質問からです。最新の回答:jquery-TokeninputとActs-as-taggable-onの使用方法

これはあなたのコントローラーに入る可能性があります。

 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

私は個人的に最初のものが好きで、入手してインストールするのが最も簡単なようです。

于 2011-12-09T02:22:24.957 に答える