Algolia 自动完成不会使用静态源转到选定的 URL
Algolia autocomplete doesn't go to the selected URL with static sources
ANSWER GetItemURL 仅用于键盘交互。它不用于鼠标处理。鼠标处理由呈现的 HTML(来自模板)完成。最简单的方法是在您的模板中使用 a HREF
,或将您带到另一个页面的 OnClick 处理程序!
——————————-
我已经复制了默认的 autocomplete code for static sources,完成和过滤器工作,getItemURL
被正确调用,但是点击 URL 没有改变。
我创建了一个沙盒,你可以看到它here。
默认代码:
const { autocomplete } = window["@algolia/autocomplete-js"];
const autocomplete_id = "#autocomplete-search-box";
function CreateAutoComplete(appid, search_api_key, index_name) {
console.log("CreateAutoComplete Called");
autocomplete({
container: autocomplete_id,
placeholder: "Type T to get completions",
getSources() {
return [
{
sourceId: "links",
getItems({ query }) {
const items = [
{ label: "Twitter", url: "https://twitter.com" },
{ label: "GitHub", url: "https://github.com" }
];
return items.filter(({ label }) =>
label.toLowerCase().includes(query.toLowerCase())
);
},
getItemUrl({ item }) {
console.log("GetItemURL", item);
console.log("returning", item.url);
return item.url;
},
templates: {
item({ item }) {
return item.label;
}
}
}
];
}
});
}
请记住,getItemUrl()
需要键盘交互(通过箭头导航并单击回车)导航到结果 URL,而不是单击。
虽然重定向被 Twitter/Github 阻止了,但这在您的 codesandbox 中有效。
ANSWER GetItemURL 仅用于键盘交互。它不用于鼠标处理。鼠标处理由呈现的 HTML(来自模板)完成。最简单的方法是在您的模板中使用 a HREF
,或将您带到另一个页面的 OnClick 处理程序!
——————————-
我已经复制了默认的 autocomplete code for static sources,完成和过滤器工作,getItemURL
被正确调用,但是点击 URL 没有改变。
我创建了一个沙盒,你可以看到它here。
默认代码:
const { autocomplete } = window["@algolia/autocomplete-js"];
const autocomplete_id = "#autocomplete-search-box";
function CreateAutoComplete(appid, search_api_key, index_name) {
console.log("CreateAutoComplete Called");
autocomplete({
container: autocomplete_id,
placeholder: "Type T to get completions",
getSources() {
return [
{
sourceId: "links",
getItems({ query }) {
const items = [
{ label: "Twitter", url: "https://twitter.com" },
{ label: "GitHub", url: "https://github.com" }
];
return items.filter(({ label }) =>
label.toLowerCase().includes(query.toLowerCase())
);
},
getItemUrl({ item }) {
console.log("GetItemURL", item);
console.log("returning", item.url);
return item.url;
},
templates: {
item({ item }) {
return item.label;
}
}
}
];
}
});
}
请记住,getItemUrl()
需要键盘交互(通过箭头导航并单击回车)导航到结果 URL,而不是单击。
虽然重定向被 Twitter/Github 阻止了,但这在您的 codesandbox 中有效。