Autocomplete 聚合物纸张输入html数据列表自动完成/建议列表
所以我在聚合物中使用了一种简单的自动完成方法Autocomplete 聚合物纸张输入html数据列表自动完成/建议列表,autocomplete,polymer,element,datalist,Autocomplete,Polymer,Element,Datalist,所以我在聚合物中使用了一种简单的自动完成方法 <paper-input autocomplete="on" name="stuff" list="stuffs"></paper-input> 有一个简单的项目列表 (同时尝试了选择和模板元素来执行此操作) . . . 问题是,我想找出一种方法来访问在键入过程中出现的建议的动态下拉列表。 真的有办法吗?我想你最好的办法就是不要使用datalist 下面是我为自己编写的组件示例: <dom-module id=
<paper-input autocomplete="on" name="stuff" list="stuffs"></paper-input>
有一个简单的项目列表
(同时尝试了选择和模板元素来执行此操作)
.
.
.
问题是,我想找出一种方法来访问在键入过程中出现的建议的动态下拉列表。
真的有办法吗?我想你最好的办法就是不要使用
datalist
下面是我为自己编写的组件示例:
<dom-module id="paper-autocomplete">
<style>
iron-collapse {
box-shadow: 6px;
}
paper-button {
width: 100%;
text-transform: none;
}
</style>
<template>
<paper-input-container>
<label>{{label}}</label>
<content select=".content"></content>
<input id="searchBox" class="paper-input-input" is="iron-input" bind-value="{{searchValue::input}}"></input>
</paper-input-container>
<iron-collapse id="collapse">
<paper-material>
<div>
<template id="resultList" is="dom-repeat" items="{{choices}}" filter="_listFilter">
<paper-item>
<paper-button on-tap="_selectItem">{{item.name}}</paper-button>
</paper-item>
</template>
</div>
</paper-material>
</iron-collapse>
</template>
</dom-module>
<script>
(function() {
Polymer({
is: "paper-autocomplete",
properties: {
choices: Array,
label: String,
value: {
type: Object,
},
searchValue: {
type: String,
value: '',
observer: "_valueChanged"
}
},
ready: function() {
this.$.resultList.render()
},
_valueChanged: function(e) {
var collapse = this.$.collapse
if (e != '' && !collapse.opened) {
this.$.resultList.render()
collapse.toggle()
} else
if (e == '' && collapse.opened) {
collapse.toggle()
}
},
_listFilter: function(item) {
return item.name.toLowerCase().includes(
this.searchValue.toLowerCase()
)
},
_selectItem: function(event) {
var collapse = this.$.collapse;
this.set('searchValue', event.model.item.name)
this.set('value', event.model.item)
collapse.toggle()
}
})
})()
</script>
铁崩塌{
盒影:6px;
}
纸扣{
宽度:100%;
文本转换:无;
}
{{label}}
{{item.name}
(功能(){
聚合物({
是:“纸张自动完成”,
特性:{
选择:数组,
标签:字符串,
价值:{
类型:对象,
},
搜索值:{
类型:字符串,
值:“”,
观察员:“_值已更改”
}
},
就绪:函数(){
这是.$.resultList.render()
},
_值更改:功能(e){
var collapse=this.$.collapse
如果(e!=''&!折叠.打开){
这是.$.resultList.render()
collapse.toggle()
}否则
如果(e=''&&collapse.opened){
collapse.toggle()
}
},
_listFilter:函数(项){
return item.name.toLowerCase().includes(
this.searchValue.toLowerCase()
)
},
_selectItem:功能(事件){
var collapse=此。$.collapse;
this.set('searchValue',event.model.item.name)
this.set('value',event.model.item)
collapse.toggle()
}
})
})()
\u valueChanged
观察输入时对搜索值的更改,并切换折叠\u listFilter
根据searchValue
过滤绑定到dom repeat
的项目
#resultList
或#collapse
元素可以出于您自己的目的放置在其他位置
编辑
我应该指出,choices
这里是一个对象数组,每个对象都有一个name属性,这就是它们的过滤方式。根据您想要实现的目标,它可以很容易地更改为在字符串数组上进行过滤。如果您更喜欢现成的聚合物元素,我建议查看一下您能澄清访问它的意思吗?您试图实现什么样的行为?例如,将其打印在不同的区域而不是下拉表单上,它当前可能有其副本。似乎没有任何方法导入PolymRelation组件,使其实际工作。这些好东西应在以下时间之前导入(路径适合您的设置):
<dom-module id="paper-autocomplete">
<style>
iron-collapse {
box-shadow: 6px;
}
paper-button {
width: 100%;
text-transform: none;
}
</style>
<template>
<paper-input-container>
<label>{{label}}</label>
<content select=".content"></content>
<input id="searchBox" class="paper-input-input" is="iron-input" bind-value="{{searchValue::input}}"></input>
</paper-input-container>
<iron-collapse id="collapse">
<paper-material>
<div>
<template id="resultList" is="dom-repeat" items="{{choices}}" filter="_listFilter">
<paper-item>
<paper-button on-tap="_selectItem">{{item.name}}</paper-button>
</paper-item>
</template>
</div>
</paper-material>
</iron-collapse>
</template>
</dom-module>
<script>
(function() {
Polymer({
is: "paper-autocomplete",
properties: {
choices: Array,
label: String,
value: {
type: Object,
},
searchValue: {
type: String,
value: '',
observer: "_valueChanged"
}
},
ready: function() {
this.$.resultList.render()
},
_valueChanged: function(e) {
var collapse = this.$.collapse
if (e != '' && !collapse.opened) {
this.$.resultList.render()
collapse.toggle()
} else
if (e == '' && collapse.opened) {
collapse.toggle()
}
},
_listFilter: function(item) {
return item.name.toLowerCase().includes(
this.searchValue.toLowerCase()
)
},
_selectItem: function(event) {
var collapse = this.$.collapse;
this.set('searchValue', event.model.item.name)
this.set('value', event.model.item)
collapse.toggle()
}
})
})()
</script>