我使用 paper-autocomplete-suggestions
创建了自动完成输入,我想从iron-ajax
响应中获取源,这是我的代码:
<iron-ajax id="procedureSource"
url="api.json">
</iron-ajax>
<template is="dom-repeat" id="sub-intents" items="{{data.data}}">
<div class="autocomplete-wrapper">
<paper-input name="sub_intent[procedure_id]" id="selectProcedure[[item.id]]" label="Select Procedure" on-keypress="_checkProcedureKeyPress"></paper-input>
<paper-autocomplete-suggestions id="selectProcedureSuggestion[[item.id]]" for="selectProcedure[[item.id]]" remote-source></paper-autocomplete-suggestions>
</div>
</template>
我在paper-input
上使用on-keypress
事件来触发iron-ajax
输入值长度应等于或大于 3 的请求。 这是我的脚本:
<script>
Polymer({
is: 'input-autocomplete',
_checkProcedureKeyPress: function (event){
var keyword = event.target.value;
var target_id = event.target.closest('paper-input').id.replace('selectProcedure', '');
if(keyword.length >= 3){
this.$.procedureSource.params = {name: keyword};
var request = this.$.procedureSource.generateRequest();
var p = request.completes;
p.then(function(xhr, response) {
var data = request.response;
var autocompleteSuggestions = document.querySelector('#selectProcedureSuggestion' + target_id);
autocompleteSuggestions.source = data;
autocompleteSuggestions.addEventListener('autocomplete-selected', function (event) {
var selected = event.detail.text;
console.log(selected);
});
})
}
})
</script>
自动完成未显示,我确定源也可以从iron-ajax
响应、元素目标(paper-autocomplete-suggestion
元素(中获得。
看起来这个组件只在remoteSource
为 false 时才处理source
,并且必须在关联的<input>
获取值之前设置source
(例如,通过静态数据(。否则,使用 remoteSource
,您必须手动设置建议数据(在处理来自远程源的原始数据之后(。
在您的情况下,虽然直接设置_suggestions
(受保护的属性(大多有效,但可能建议为此(suggestions()
(使用元素的公共 API,以便正确重置内部索引。
演示
我找到了它。必须将数据分配给_suggestions属性而不是source
属性
var data = request.response;
var autocompleteSuggestions = document.querySelector('#selectProcedureSuggestion' + target_id);
autocompleteSuggestions._suggestions = data;
autocompleteSuggestions.addEventListener('autocomplete-selected', function (event) {
var selected = event.detail.text;
});