我正在使用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?
答案 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
});