Jquery 使用Twitter Typeahead.js访问元素的数据属性

Jquery 使用Twitter Typeahead.js访问元素的数据属性,jquery,ruby-on-rails-4,coffeescript,twitter-typeahead,Jquery,Ruby On Rails 4,Coffeescript,Twitter Typeahead,我使用Rails生成表单。我想使用TwitterTypeahead自动完成具有模型关联的字段 以下CoffeeScript代码: console.log $('.typeahead').data('source') 作品及回报: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 我可以从typeahead函数中访问相同的数据吗?以下代码: $('.typeahead').typeahe

我使用Rails生成表单。我想使用TwitterTypeahead自动完成具有模型关联的字段

以下CoffeeScript代码:

console.log $('.typeahead').data('source')
作品及回报:

["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
我可以从typeahead函数中访问相同的数据吗?以下代码:

$('.typeahead').typeahead(
    name: 'test'
    local: $(this).data('source')
    console.log $(this).data('source'))

不起作用并返回未定义的

最简单的方法是保存对jQuery对象的引用,并使用该引用代替此

$input = $ '.typeahead'
$input.typeahead
    name: 'test'
    local: $input.data 'source'
问题是,
$(this).data('source')
在传递给
.typeahead()
之前会进行求值。此时,
仍设置为全局范围,没有附加任何数据

另一个选项是手动调用
.typeahead
元素,而不是依赖
.typeahead()
来迭代选定的元素本身,即使您有多个
.typeahead
元素也可以使用:

$('.typeahead').each ->
    $(this).typeahead
        name: 'test'
        local: $(this).data 'source'

这是因为传递给
.each()
的函数是“在当前DOM元素的上下文中激发的,因此关键字
This
引用元素”(请参见)。

我相信这在我的页面中不适用于多个.typeahead类。现在,我使用了一种变通方法,并为我想要自动完成的每个字段复制了具有唯一id元素的js代码。我必须为整个网站做这件事,这不是很优雅,但它现在可以工作。我添加了一个替代方案,其中有多个
.typeahead
元素。太棒了。这正是我想做的。你太棒了!