在聚合物中使用来自本地DOM的datalist

时间:2016-01-22 09:35:10

标签: javascript autocomplete polymer polymer-1.0 web-component

我的自定义组件' autocomplete-input'应该提供自动完成功能。我正在使用'列表'纸张输入的属性'。 '列表'的值属性必须是' id'一位数据家'。

这个工作正常,只要我只实例化一个' autocomplete-input'元件。如果有多个'自动完成输入'元素,它们都显示相同的自动完成提议。我想这是因为'列表'属性不使用本地DOM,因此使用第一个' datalist'有特殊的' id'。我怎么能避免这个?

'自动完成输入'元素:

<dom-module id="autocomplete-input">
  <template>
    <datalist id="autocomplete">
      <template is="dom-repeat" items="{{proposals}}">
        <option data-value$="{{item.value}}">{{item.content}}</option>
      </template>
    </datalist>
    <paper-input id="input" list="autocomplete" label="{{header}}" value="{{content::input}}"></paper-input>
  </template>
  <script>
  Polymer({
    is: 'autocomplete-input',
    properties: {
      header: String,
      content: String,
      proposals: Array
    }
  });
  </script>
</dom-module>

1 个答案:

答案 0 :(得分:1)

使用全局计数器并将其添加到您的ID

<dom-module id="autocomplete-input">
  <template>
    <datalist id$="[[autocompleteId]]">
      <template is="dom-repeat" items="{{proposals}}">
        <option data-value$="{{item.value}}">{{item.content}}</option>
      </template>
    </datalist>
    <paper-input id="input" list$="[[autocompleteId]]" label="{{header}}" value="{{content::input}}"></paper-input>
  </template>
  <script>
  Polymer({
    is: 'autocomplete-input',
    properties: {
      header: String,
      content: String,
      proposals: Array,
    }
  }),
  autoCompleteId: function() {
    return this.autocompleteId = this.autocompleteId || ++globalId; 
    // see linke below to figure out how to use globals
  }
  </script>
</dom-module>

有关Polymer中全局变量的更多详细信息,请参阅Polymer 1.0 Global Variables(我的JS不够好,因为我只使用Dart中的Polymer)