【发布时间】:2015-03-30 04:15:33
【问题描述】:
我正在使用 Typeahead 在下拉列表中呈现我的“用户”模型的实例:
控制器:
def typeahead
render json: User.where(name: params[:query])
end
查看:
<input type="text" id="typeahead">
<script type="text/javascript">
var bloodhound = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: '/typeahead/%QUERY',
limit: 50
});
bloodhound.initialize();
$('#typeahead').typeahead(null, {
displayKey: 'name',
source: bloodhound.ttAdapter()
});
$('#typeahead').bind('typeahead:selected', function(event, datum, name) {
doSomething(datum.id);
});
</script>
此代码会在我键入时导致User.names 列表下拉。
我可以渲染图像吗,在这种情况下是User.avatar.url(:thumb)?当我将 displayKey: 'name', 更改为 displayKey: 'avatar.url(:thumb)', 时,下拉列表只是为每个用户显示“未定义”。
[我确保User.avatar.url(:thumb) 在其他地方成功显示]
【问题讨论】:
-
您的 javascript 没有解释 ruby。它正在访问返回的 json 上的
name键。如果您希望能够使用avatar,您将看到它是如何包含在 json 中的。假设paperclip,您将有一个avatar_file_name键,但我对typeahead不够熟悉,无法告诉您如何将该文件名转换为图像以显示在您的javascript 中。 -
@ptd 你认为至少有可能吗?
标签: javascript jquery ruby-on-rails json render