0

Rails3.2アプリにselect2を実装しようとしています。

具体的には、テンプレートを使用して、国のフラグと国の名前を含む国の選択フィールドを表示したいと思います。

国モデルとユーザーモデルがあります。私の国モデルには:code属性があります。:code属性に基づいてフラグを表示するためにCSSスプライトを使用しています。

<img class="flag flag-#{country.code}">

ユーザーフォームに

<%= f.collection_select :country_id, Country.order(:name), :id, :name, include_blank: true %>

そしてuser.js.coffee.erbに私は持っています

jQuery ->  
    format = (country) ->
        "<img class='flag flag-#{country.code}' src='#'/>" + country.name       
    $('#prerep_country_id').select2
        placeholder: "Select a country",
        allowClear: true,
        formatResult: format,
        formatSelection: format

すべてを結び付けるのに問題があります(おそらく、アセットパイプラインとjs.erbがどのように機能するかについての継続的な学習の一部です)。

現在、selectフィールドはselect2を使用してレンダリングされていますが、国のリストのみが含まれています。フォーマットなし。

各国をformat = (country)関数に渡して、フラグでフォーマットされるようにするにはどうすればよいですか?

ポインタをありがとう。

4

1 に答える 1

1

細かいマニュアルから:

formatSelection

現在の選択をレンダリングするために使用される関数。

formatSelection(object)

objectパラメータは

query関数から返された選択された結果オブジェクト。

そして少し下に行くqueryと、特に次のことがわかります。

結果オブジェクトの配列。デフォルトのレンダラーはidtextキーを持つオブジェクトを想定しています。idカスタムレンダラーを使用する場合でも、この属性は必須です。

また、例(http://jsfiddle.net/ambiguous/a73gc/ )を見ると、関数にキーが付いたオブジェクトformatが渡されていることがわかります。一方、あなたは見ていますが、そこには何もありません。あなたは次のような画像を生成します。countryidtextcountry.code

<img class='flag flag-' src='#'/>

したがって、フラグは取得されません。

代わりにこれを試してください:

format = (country) ->
    "<img class='flag flag-#{country.id}' src='#'/>" + country.name
    #--------------------------------^^

おそらくあなたはすでにCSSを持っているheightので、フラグの大きさを心配する必要はありません。widthimg.flag

また、HTML5を使用している場合は、XMLスタイルの/>自動終了タグを失う可能性があります。問題ありません<img ...>

于 2012-06-05T16:51:47.470 に答える