- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何使用 amp-list、amp-mustache、amp-form 和 amp-bind 实现自动建议?
想要为页内搜索实现自动建议
研究过这个Google example
希望autosuggest
以这种格式在单个页面上查找美国州首府
<div id='4'>Little Rock is ...</div>
我们的 JSON 结构如下所示
{
"items": [{
"query": "",
"results": [{"Montgomery, Alabama","id='1'"},
{"Juneau, Alaska","id='2'"},
{"Phoenix, Arizona","id='3'"},
{"Little Rock, Arkansas","id='4'"}]
}]
}
已经实现了 MCV(最小、完整、可验证)example here
如何修改示例以根据结果列表中的选择导航到页面上的特定项目?
最佳答案
以下是您需要执行的操作的快速摘要
#2
看起来像这样
{{#results}}
<div
class='select-option no-outline'
role='option'
tabindex='0'
on='tap:autosuggest-list.hide,{{id}}.scrollTo'
option='{{title}}'
>{{title}}</div>
{{/results}}
这是具体的构建过程(步骤 A – D)
A. HTML 和 AMP 代码:
服务器端点
https://example.com/state_capitals/query
amp-form
<form
method='post'
action-xhr='https://example.com/state_capitals'
target='_blank'
id='search-form'
on='submit:autosuggest-list.hide;submit-success:results.show'
autocomplete='off'
>
HTML 输入
<div class='search-container'>
<input
id='query'
name='query'
type='text'
class='search-box'
on="input-debounced:AMP.setState({
query: event.value,
autosuggest: event.value
}),
autosuggest-list.show,
results.hide"
[value]="query || ''"
/>
<button class='search-submit' type='submit'>Search</button>
</div>
以上代码设置输入框
放大器列表
接下来,将 '/state_capitals/query'
端点的结果绑定(bind)到 amp-list
和 amp-selector
组件,如下所示:
<amp-list
class='autosuggest-box'
layout='fixed-height'
height='120'
src='/state-capitals/query'
[src]="'/state-capitals/query?q=' + (autosuggest || '')"
id='autosuggest-list'
hidden
>
amp-list组件的来源来自/state-capitals/query
的结果,采用JSON
格式。
JSON 端点结构
{"items":[{
"query": "",
"results": [
{"title": "Little Rock, Arkansas", "id":"4"},
{"title": "Olympia, Washington", "id":"47"},
{"title": "Charleston, West Virginia", "id":"48"},
{"title": "Madison, Wisconsin", "id":"49"},
...
]}]}
amp 模板
使用 amp-mustache
组件打印 JSON 格式的结果。
<amp-list ...>
<template type='amp-mustache'>
{{#results}}
<amp-selector
keyboard-select-mode='focus'
layout='container'
on='select:AMP.setState({query: event.targetOption}),
autosuggest-list.hide,{{id}}.scrollTo'
>
<div
class='select-option no-outline'
role='option'
tabindex='0'
on='tap:autosuggest-list.hide'
option='{{title}}'
>{{title}}</div>
{{/results}}
</amp-selector>
</template>
</amp-list>
关于 amp-selector
和 on=
的快速说明代码如下:
on='select:AMP.setState({
query: event.targetOption}),
autosuggest-list.hide,{{id}}.scrollTo'
将滚动到:
{{id}}.scrollTo
例如,表行 ID 为 107
<li><a href="1">Montgomery</a></li>
<li><a href="2">Juneau</a></li>
<li><a href="3">Phoenix</a></li>
<li><a href="4">Little Rock</a></li>
B.端点实现
Data = [
{"title": "Little Rock, Arkansas", "id":"4"},
...
{"title": "Olympia, Washington", "id":"47"},
{"title": "Charleston, West Virginia", "id":"48"},
{"title": "Madison, Wisconsin", "id":"49"},
];
app.use('/state_capitals/query', (req, res) => {
assertCors(req, res, ['GET']);
const MAX_RESULTS = 4;
const query = req.query.q;
if (!query) {
res.json({
items: [{
query: "",
results: capitals.slice(0, MAX_RESULTS)
}]
});
} else {
const lowerCaseQuery = query.toLowerCase();
const filtered = capitals.filter(function(e) {return e.title.toLowerCase().includes(lowerCaseQuery)});
res.json({
items: [{
query: "",
results: filtered.slice(0, MAX_RESULTS)
}]
});
}
});
C. NGINX 设置
Node.js 应用程序在域:< … > 和指定端口上运行。
当用户在浏览器中运行您的网站时,要求 Nginx 将端口号 80 的所有流量转发到指定端口。这是通过使用conf 文件中的位置设置来完成的:
location /state_capitals/ {
proxy_pass http://domain:3002/;
}
D:实现
关于node.js - 如何使用 amp-list、amp-mustache、amp-form 和 amp-bind 实现自动建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51362690/
我正在关注 this关于在自己的网站中集成 Paypal 的教程。 例如,在页面中的第 3 步的第 20 行,我发现了这个: if (!isset($_POST["txn_id"]) &
amp-story 是否与 amp-access(或 amp-subscription)一起使用? 这里是 amp-access 的示例代码 { "authorization": "
我在一个主题中有几个非 AMP 页面。我的非 AMP 页面将在文章正文中包含指向同一主题中其他非 AMP 页面的链接。页面的 AMP 版本应该链接到同一主题中的其他 AMP 页面,还是文章中的所有链接
这是我正在尝试做的事情: 使用 google API 对邮政编码或城市和州进行地理定位。地址参数的值来自表单字段。 将地理线插入同一表单中的隐藏字段 提交表格。 我已经尝试使用 AMP-LIST 和
搜索控制台添加了一系列“引用的 AMP 网址不是 AMP”问题。 如果我使用 AMP Test我得到: 但是,当我 checkin https://validator.ampproject.org/时
更具体地说,您可以在未通过 AMP 验证的页面上使用 AMP 标记和代码吗? 用例:我想使我的网站完全使用 AMP,为此,我需要使用类似 on='tap:' 的东西对于我的下拉菜单和 用于跟踪,但我网
更具体地说,您可以在未通过 AMP 验证的页面上使用 AMP 标记和代码吗? 用例:我想使我的网站完全使用 AMP,为此,我需要使用类似 on='tap:' 的东西对于我的下拉菜单和 用于跟踪,但我网
如何使用 amp-list、amp-mustache、amp-form 和 amp-bind 实现自动建议? 想要为页内搜索实现自动建议 研究过这个Google example 希望autosugge
我想知道如何根据用户选择的选项获取文本内容并将其设置为amp-state。例如,如果用户选择“红色”选项。我想将“胭脂”设置为 amp-state 而不是“红色”。我知道我可以通过 setState
示例:- Open Iframe in Lightbox 我还尝试从顶部操纵 iFrame 的位置 75% 或 600px,但它也不起作用。 AMP iFr
我有一个名为 currentItem 的状态,其中包含 url、标题、描述...当我按下按钮时,currentItem 应保存在名为 myItems 的其他状态中。它将包含一个项目对象列表。 现在的问
我是 Azure SQL 数据库的新手(之前没有数据库经验),目前正在尝试从 microsoft learn 获得学位。我被困在这节课中,似乎无法弄清楚,但我认为这很容易。问题: PS /home/s
我正在尝试测试新的 amp-script 功能有多强大。但是,我收到此错误: Experiment "amp-script" is not enabled. log.js:187 "E
我在 AMP 结合 amp-state 和 amp-position-observe 时遇到问题。 { "visible": "n"
有 3 种方法可以将 AMP 与 PWA 结合起来(如 here 中所述): 具有 PWA 功能的 AMP 页面 AMP 作为 PWA 的入口点 AMP 作为 PWA 的数据源 在第一种和第三种方法中
我在 AMP 结合 amp-state 和 amp-position-observe 时遇到问题。 { "visible": "n"
我有一个 amp 故事,我需要从动态生成的 url 创建一个包含全屏视频的页面。在下面的第 2 页中,我直接使用 amp-video 组件呈现全屏,在第 3 页中,我使用 amp-list 提供视频
查看 AMP 规范,鉴于自定义样式元素依赖于 CSS 变量,这意味着当前的浏览器支持范围很窄。见:Can I use reference 我猜非自定义样式有一个“优雅的回退”,因为不理解 CSS 变量
我是 AMP 的新手。我有一个响应式网站,我需要在其主页上实现 AMP。是否可以使其与 AMP 兼容而不影响桌面 View ?或者我需要为 AMP 重写单独的代码? 最佳答案 您可以使用@media来
我在实现 amp-iframe 时在控制台中收到以下验证错误: Overflow element must be defined for resizable frames 有什么解决办法吗? 最佳答
我是一名优秀的程序员,十分优秀!