4

モデルの名前の Ajax が入力されたリストを表示する、ユーザーが入力できるテキスト ボックスが必要です。ユーザーが選択すると、HTML にモデルの ID が保存され、フォームが送信されたときにそれが使用されます。 .

Rails 2 で削除された auto_complete プラグインを調べてみましたが、これが役立つ可能性があるとは思えません。そのプラグインの使用をカバーするRailscast のエピソードがありますが、このトピックには触れていません。コメントは、それが問題になる可能性があることを指摘しmodel_auto_completer、可能な解決策として指摘しています。これは、表示されたアイテムが単純な文字列である場合に機能するようですが、挿入されたテキストには、(私がやりたいように)ドキュメントに記載されていることにもかかわらず、リスト項目に画像を含めます。

私はおそらく形状にハックmodel_auto_completerすることができますし、最終的にはそうするかもしれませんが、より良いオプションがあるかどうかを知りたいと思っています.

4

2 に答える 2

1

私は自分で転がした。プロセスは少し複雑ですが...

オブザーバーを使用してフォームにtext_fieldを作成しました。テキストフィールドへの入力を開始すると、オブザーバーは検索文字列を送信し、コントローラーはオブジェクトのリスト(最大10)を返します。

次に、オブジェクトは、動的オートコンプリート検索結果に入力されるパーシャルを介してレンダリングに送信されます。パーシャルは、実際には、コントローラーに再度ポストバックするlink_to_remote行にデータを入力します。link_to_remoteはユーザー選択のIDを送信し、RJSが検索をクリーンアップし、テキストフィールドに名前を入力してから、選択したIDを非表示のフォームフィールドに配置します。

ふぅ...当時、これを行うためのプラグインが見つからなかったので、自分で作成しました。それがすべて理にかなっていることを願っています。

于 2008-09-17T08:56:13.780 に答える
0

画像のジャンク スペースをハックニーで修正しました。:after_update_element => "trimSelectedItem"のオプション ハッシュにa を追加しましたmodel_auto_completer(指定された 3 つのハッシュの最初のハッシュです)。次にtrimSelectedItem、適切なサブ要素を見つけて、その内容を要素値として使用します。

function trimSelectedItem(element, value, hiddenField, modelID) {
    var span = value.down('span.display-text')
    console.log(span)
    var text = span.innerText || span.textContent
    console.log(text)
    element.value = text
}

ただし、これは:allow_free_textオプションに違反します。デフォルトでは、テキスト ボックス内のテキストがリストの「有効な」項目でない場合、テキスト ボックスがフォーカスを失うとすぐにテキストを元に戻します。:allow_free_text => trueそのため、オプション ハッシュ (ここでも最初のハッシュ) に渡して、これも無効にする必要がありました。私は本当にそれが残っていたほうがいいです。

したがって、オートコンプリートを作成するための現在の呼び出しは次のとおりです。

<%= model_auto_completer(
    "line_items_info[][name]", "", 
    "line_items_info[][id]", "",
    {:url => formatted_products_path(:js),
     :after_update_element => "trimSelectedItem",
     :allow_free_text => true},
    {:class => 'product-selector'},
    {:method => 'GET',  :param_name => 'q'}) %>

そして、products/index.js.erb は次のとおりです。

 <ul class='products'>
    <%- for product in @products -%>
    <li id="<%= dom_id(product) %>">
            <%= image_tag image_product_path(product), :alt => "" %>
            <span class='display-text'><%=h product.name %></span>
    </li>
    <%- end -%>
 </ul>
于 2008-09-17T09:13:17.717 に答える