【问题标题】:How to pass model attributes to coffeescript for select2 templating in Rails如何将模型属性传递给咖啡脚本以在 Rails 中进行 select2 模板
【发布时间】:2012-06-05 08:46:47
【问题描述】:

我正在尝试在 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) 函数,以便使用标志对其进行格式化?

感谢您的任何指点。

【问题讨论】:

    标签: jquery ruby-on-rails coffeescript jquery-select2


    【解决方案1】:

    来自fine manual

    格式选择

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

    formatSelection(object)
    

    object参数是

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

    再往下一点,我们会看到 query 的全部内容,尤其是:

    结果对象数组。默认渲染器期望具有 idtext 键的对象。 id 属性是必需的,即使使用自定义渲染器也是如此。

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

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

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

    试试这个:

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

    大概你的img.flag CSS 中已经有heightwidth,所以我们不必担心标志有多大。

    此外,如果您使用的是 HTML5,则可能会丢失 XML 样式的 /&gt; 自闭合标签,只需 &lt;img ...&gt; 即可。

    【讨论】:

    • 感谢您提供非常有用的答案。所以澄清一下,如果我需要 :code 属性,我可以执行类似 `
    • @AndyHarvey:$('#prerep_country_id').select2 会被调用吗?在传递给formatcountry 中应该有一个idformat 是否被调用?
    • 是的,$('#prerep_country_id').select2 被调用,但格式不是。解决此问题并找出失败之处的最佳方法是什么?
    • @AndyHarvey:你确定format 没有被调用吗?它在jsfiddle.net/ambiguous/a73gc 中运行良好,那么有什么不同呢?你检查过你的空白吗?
    • 嗨 mu,检查我的调试器,我看到了 Uncaught ReferenceError: format is not defined。我仍然没有真正理解变量country 的来源,它被传递给format。感觉这可能是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多