1

Railscast #258 (改訂版) に示されているように、jQuery Tokeninput を使用しようとしています。tokeninput フィールドに何かを入力すると、フィールドに結果がドロップダウンされず、次の JavaScript エラーが発生します: Uncaught TypeError: Cannot call method 'replace' of undefined.

手動でクエリを実行すると、json データは正常に機能し、サーバー リクエストは正常に表示されます。問題テーブルのコンテンツ列を検索しようとしているので、propertyToSearch を「コンテンツ」に設定します。

これが私のコードです:

コーヒースクリプト:

jQuery ->
$('#fact_issue_tokens').tokenInput "/issues.json"
    theme: 'facebook'
    zindex: 11001
    propertyToSearch: 'content'
    tokenValue: 'content'
    hintText: 'Enter an issue'
    preventDuplicates: true

問題のモデル:

def self.tokens(query)
  issues = where("content like ?", "%#{query}%")
  if issues.empty?
    [{id: "<<<#{query}>>>", content: "New: \"#{query}\""}]
  else
    issues
  end
end

def self.ids_from_tokens(tokens)
  tokens.gsub!(/<<<(.+?)>>>/) { create!(content: $1).id }
  tokens.split(',')
end

問題管理者:

def index
  @issues = Issue.order(:content)

  respond_to do |format|
    format.html
    format.json { render json: @issues.tokens(params[:q]) }
  end
end

形:

<%= form_for(Fact.new, :url => kase_facts_path(current_kase), :html => {:class => "form-   
inline"}) do |f| %>

  <%= f.text_field :page, placeholder: 'Page' %>
  <%= f.text_field :description, placeholder: 'Description' %>

  <%= f.label :issue_tokens, 'Issue tags' %>
  <%= f.text_field :issue_tokens %>

  <%= f.hidden_field :source_id, :value => @source.id %>

  <%= f.submit 'Add Fact' %>
<% end %>
4

1 に答える 1

1

@スコットあなたはこれを試してください

jQuery ->
  $('#fact_issue_tokens').tokenInput '/issues.json'
    theme: 'facebook'
    tokenLimit: 5
    minChars: 4
    preventDuplicates: true
    searchingText: "Enter an issue..."
    prePopulate: $('#fact_issue_tokens').data('load')

名前ではなく (:content) を使用しているため、インデックスを検討してください。理由はわかりませんが、タイトルを使用して問題が発生しました。mysqlか何かだと思いました。ご来店の際は

http://localhost:3000/issues.json

JSON データを取得しますか?

編集。

あなたのフォームでこれを試してみませんか?

<div class="field">
  <%= f.label :issue_tokens, "Issues" %><br />
  <%= f.text_field :issue_tokens, data: {load: @fact.issues} %>
</div>
于 2012-05-14T05:32:46.350 に答える