让 Typeahead.js 使用 Fat Free Framework
Getting Typeahead.js to work with Fat Free Framework
我正在尝试让 twitter typeahead.js 与我的 Fat Free Framework 设置一起使用,但到目前为止失败了。
我在 SearchController 中的 PHP 代码:
function itemsearch($f3){ // search
$query = filter_var($f3->get('PARAMS.string'), FILTER_SANITIZE_STRING);
$db=$f3->get('DB');
$result = $db->exec("
SELECT * FROM items
WHERE itemName LIKE '%$query%'
");
echo json_encode($result);
}
我的路线:
$f3->route('GET /search/item/@string','SearchController->itemsearch');
如果我直接通过浏览器调用此路由,我的查询会得到一个很好的 json 结果。
我的HTML / jquery:
$(document).ready(function(){
var items = new Bloodhound({
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '{{@BASE}}/search/item/$QUERY',
filter: function (items) {
return $.map(items.results, function (item) {
return {
value: item.itemName
};
});
}
}
});
items.initialize();
$('.typeahead').typeahead(null, {
displayKey: 'value',
source: items.ttAdapter()
});
});
如果我将此代码与 url 替换为测试 url: 'http://api.themoviedb.org/3/search/movie?query=%QUERY&api_key=470fd2ec8853e25d2f8d86f685d2270e' 我会得到很好的预输入结果,但是我自己的 URL (在上面的代码中)没有任何反应。
我怎样才能让它与 Fat Free Framework 一起工作?
看来我犯了一个简单的错误,文档对此并不清楚:
$('.typeahead').typeahead(null, {
displayKey:'value',
source: items.ttAdapter()
});
应该是
$('.typeahead').typeahead(null, {
displayKey:'itemName',
source: items.ttAdapter()
});
因此 displayKey 值应该是您在 json 结果中搜索的 'item'。在我的例子中,json 返回了
itemName:whatever
所以我的 displayKey 值应该是 itemName 以便显示值 whatever
我正在尝试让 twitter typeahead.js 与我的 Fat Free Framework 设置一起使用,但到目前为止失败了。
我在 SearchController 中的 PHP 代码:
function itemsearch($f3){ // search
$query = filter_var($f3->get('PARAMS.string'), FILTER_SANITIZE_STRING);
$db=$f3->get('DB');
$result = $db->exec("
SELECT * FROM items
WHERE itemName LIKE '%$query%'
");
echo json_encode($result);
}
我的路线:
$f3->route('GET /search/item/@string','SearchController->itemsearch');
如果我直接通过浏览器调用此路由,我的查询会得到一个很好的 json 结果。
我的HTML / jquery:
$(document).ready(function(){
var items = new Bloodhound({
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '{{@BASE}}/search/item/$QUERY',
filter: function (items) {
return $.map(items.results, function (item) {
return {
value: item.itemName
};
});
}
}
});
items.initialize();
$('.typeahead').typeahead(null, {
displayKey: 'value',
source: items.ttAdapter()
});
});
如果我将此代码与 url 替换为测试 url: 'http://api.themoviedb.org/3/search/movie?query=%QUERY&api_key=470fd2ec8853e25d2f8d86f685d2270e' 我会得到很好的预输入结果,但是我自己的 URL (在上面的代码中)没有任何反应。
我怎样才能让它与 Fat Free Framework 一起工作?
看来我犯了一个简单的错误,文档对此并不清楚:
$('.typeahead').typeahead(null, {
displayKey:'value',
source: items.ttAdapter()
});
应该是
$('.typeahead').typeahead(null, {
displayKey:'itemName',
source: items.ttAdapter()
});
因此 displayKey 值应该是您在 json 结果中搜索的 'item'。在我的例子中,json 返回了
itemName:whatever
所以我的 displayKey 值应该是 itemName 以便显示值 whatever