Bootstrap typeahead返回显示的值而不是id?

时间:2013-12-31 16:53:54

标签: ruby-on-rails twitter-bootstrap

我正在使用Twitter引导程序,使用https://gist.github.com/dinnouti/3896201中的“借用”

$ ->
  $('select[rel="autocomplete"]').each ->
    option = []     
    $(this).find('option').each ->     
      option.push $(this).text()

    input = $('<input>')
    input.attr('type','text')
    input.attr('name', $(this).attr('name') )
    input.attr('id', $(this).attr('id') )  
    input.attr('class', $(this).attr('class') )
    input.attr('placeholder', $(this).attr('placeholder') )
    input.attr('data-provide', 'typeahead' )
    input.val($(this).attr('data_default'))
    $(this).replaceWith(input)

    $(input).typeahead({
      source : option
      updater: (item) ->
        @$element[0].value = item
        @$element[0].form.submit()
        item
    });  

在我看来,我有

= form_tag home_select_path, autocomplete: 'off' do
  = select_tag 'subject', options_for_select(get_subjects), class: 'select optional', include_blank: false, rel: 'autocomplete'

这样可以正常工作,但是,将显示的值返回给我的控制器,这样我就必须进行“反向查找”以找回所引用的对象ID ...

有没有办法可以改变它来返回对象的ID?

2 个答案:

答案 0 :(得分:0)

我认为“get_subjects”包含一个 id 名称属性的列表
因此,当提交表单时,它将获取ID值而不是select_tag的名称

您可以尝试更改

options_for_select(get_subjects)

options_from_collection_for_select(get_subjects,"id","name")

答案 1 :(得分:0)

我终于找到了答案。我在我的javascript中添加了一个“map”,将select / options中的“text / value”对存储为javascript哈希。我现在使用该哈希在updater中查找项的id,并将其作为值分配给输入字段。这个值显然是发送给控制器......

$ ->
  $('select[rel="autocomplete"]').each ->
    option = []
    map = {}
    $(this).find('option').each ->     
      option.push $(this).text()
      map[$(this).text()] = $(this).attr('value')

    ...

    $(input).typeahead({
      updater: (item) ->
        @$element[0].value = map[item]
        @$element[0].form.submit()
        item
    });