javascript - 如何在Polymer 2.x中正确使用IronA11yKeysBehavior

标签 javascript ecmascript-6 polymer polymer-2.x

我正在尝试使用类语法为 Polymer 2.x 创建一个新元素,但现在我无法使用 IronA11yKeysBehavior。我在这里做错了什么?

<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-a11y-keys-behavior/v2.0.0/polymer/polymer.html">
<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-a11y-keys-behavior/v2.0.0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/paper-input/v2.0.0/paper-input/paper-input.html">

<dom-module id="my-control">
  <template>
    Template Content! Pressing enter should show an alert message. [[result]]
    <paper-input label="Demo Template Input" value="{{result}}"></paper-input>
  </template>
  <script>
    "use strict";
    class MyControl extends Polymer.mixinBehaviors([
      Polymer.IronA11yKeysBehavior
    ], Polymer.Element){
      static get is(){return 'my-control'; }
      static get keyBindings(){
        return {
          'enter': '_updatePressed'
        };
      }
      static get instanceKeyBindings(){
        return {
          'enter': '_updatePressed'
        };
      }
      _updatePressed(event){
        console.log(event.detail);
        this.result = "Enter pressed";
        alert("Enter pressed");
      }
    }
    customElements.define(MyControl.is, MyControl);
  </script>
</dom-module>


<my-control></my-control>

当我使用旧语法时,一切正常。

<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-a11y-keys-behavior/v2.0.0/polymer/polymer.html">
<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-a11y-keys-behavior/v2.0.0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
<link rel="import" href="https://raw-dot-custom-elements.appspot.com/PolymerElements/paper-input/v2.0.0/paper-input/paper-input.html">

<dom-module id="my-control">
  <template>
    Template Content! [[result]]
    <paper-input label="Demo Template Input" value="{{result}}"></paper-input>
  </template>
  <script>
    "use strict";
    Polymer({
    is: 'my-control',
    behaviors: [
      Polymer.IronA11yKeysBehavior
    ],
    keyBindings: { 'enter': '_updatePressed' },
		_updatePressed: function(event){
        console.log(event.detail);
        this.result = "Enter pressed";
        alert("Enter pressed");
    }
  });
  </script>
</dom-module>
<my-control></my-control>

如何使用新类语法的行为?

最佳答案

keyBindings 应该是一个实例 getter,而不是静态 getter。否则,您的代码看起来是正确的。

class MyControl extends Polymer.mixinBehaviors([Polymer. IronA11yKeysBehavior], Polymer.Element) {
  // static get keyBindings() { ... }   // DON'T DO THIS
  get keyBindings() { ... }             // DO THIS
}

这是更正后的代码片段:

<base href="https://cdn.rawgit.com/download/polymer-cdn/2.6.0.2/lib/">
<script src="webcomponentsjs/webcomponents-loader.js"></script>
<link rel="import" href="polymer/polymer.html">
<link rel="import" href="iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
<link rel="import" href="paper-input/paper-input.html">

<dom-module id="my-control">
  <template>
    Template Content! Pressing enter should show an alert message. [[result]]
    <paper-input label="Demo Template Input" value="{{result}}"></paper-input>
  </template>
  <script>
    "use strict";
    class MyControl extends Polymer.mixinBehaviors([
      Polymer.IronA11yKeysBehavior
    ], Polymer.Element){
      static get is(){return 'my-control'; }
      get keyBindings(){
        return {
          'enter': '_updatePressed'
        };
      }
      static get instanceKeyBindings(){
        return {
          'enter': '_updatePressed'
        };
      }
      _updatePressed(event){
        console.log(event.detail);
        this.result = "Enter pressed";
        alert("Enter pressed");
      }
    }
    customElements.define(MyControl.is, MyControl);
  </script>
</dom-module>


<my-control></my-control>

看起来 IronA11yKeysBehavior 存储库当前只有 legacy demo ,但我已将其转换为 Polymer 2 的基于 class 的语法,在此 Codepen .

关于javascript - 如何在Polymer 2.x中正确使用IronA11yKeysBehavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44546357/

相关文章:

javascript - Polymer如何使用Core-TransitionEnd

polymer - 如何访问 Polymer 中的::content 元素

javascript - 从数组分配属性

javascript - html5缓存,每次用户在线时更新

javascript - Javascript 中 Object.entries 的数组解构

javascript - ES6 重新导出的值被包装到 Getter 中

polymer - 在 Polymer 的 <google-chart> Web 组件中使用 "google.visualization.*"对象

javascript - Rails3 中的 Google Instant 式搜索

javascript - 在 Chrome 调试器中编辑

Javascript:从嵌套函数调用外部方法