0

我正在尝试在 Rails 3.2 应用程序中实现select2 。

具体来说,我想使用模板来显示带有国家标志+国家名称的国家选择字段。

我有一个 Country 模型和 User 模型。My Country 模型有一个:code属性。我正在使用 CSS 精灵来显示基于:code属性的标志。

<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 如何工作的一部分)。

目前,选择字段使用 select2 呈现,但仅包含国家列表。没有格式化。

如何将每个国家/地区传递给该format = (country)函数,以便使用标志对其进行格式化?

感谢您的任何指示。

4

1 回答 1

1

来自精美手册

格式选择

用于呈现当前选择的函数。

formatSelection(object)

object参数是

从函数返回的选定结果对象query

再往下一点,我们会看到query所有内容,特别是:

结果对象数组。默认渲染器需要带有idtext键的对象。id即使使用了自定义渲染器,该属性也是必需的。

如果我们看一个例子(http://jsfiddle.net/ambiguous/a73gc/),我们会看到你的format函数被传递了一个country带有idtext键的对象。另一方面,您正在查看,country.code但那里什么也没有,您会生成如下图像:

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

所以你不会得到任何标志。

试试这个:

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

大概你已经拥有height并且width在你的img.flagCSS 中,所以我们不必担心标志有多大。

此外,如果您使用的是 HTML5,则可能会丢失 XML 样式的/>自闭合标签,这<img ...>很好。

于 2012-06-05T16:51:47.470 回答