我如何控制 json 渲染的内容?
How can I control what is rendered by json?
我正在使用 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.name
的列表。例如,我如何为每个用户呈现 User.email
?
也许试试这样的东西?
render json: User.where(name: params[:query]).as_json(only: :email)
displayKey
要么期望显示建议对象的字段名,要么一个函数将建议对象转换为字符串。
$('#typeahead').typeahead(null, {
displayKey: function(suggestion){
return suggestion.name + " " + suggestion.email;
},
source: bloodhound.ttAdapter()
});
我正在使用 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.name
的列表。例如,我如何为每个用户呈现 User.email
?
也许试试这样的东西?
render json: User.where(name: params[:query]).as_json(only: :email)
displayKey
要么期望显示建议对象的字段名,要么一个函数将建议对象转换为字符串。
$('#typeahead').typeahead(null, {
displayKey: function(suggestion){
return suggestion.name + " " + suggestion.email;
},
source: bloodhound.ttAdapter()
});