0

我正在尝试演示<iron-selector>。在演示中,当用户从列表中选择一个新值时,我想登录到控制台。我究竟做错了什么?

这是JSBin。

http://jsbin.com/ciceguqore/1/edit?html,控制台,输出
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>

  <base href="//polygit.org/polymer+:master/components/">
  <script src="webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="import" href="polymer/polymer-element.html">
  <link rel="import" href="iron-selector/iron-selector.html">

</head>
<body>
  <dom-module id="my-el">
    <template>
      <iron-selector selected="[[route]]">
        <div>Item 1</div>
        <div>Item 2</div>
        <div>Item 3</div>
      </iron-selector>
    </template>
    <script>
      class MyEl extends Polymer.Element {
        static get is() { return 'my-el' }

        static get properties() { return {
          route: {
            type: Number,
            notify: true,
            observer: '_routeChanged',
          },
        }}

        constructor() {
          super();
        }

        _routeChanged(route) {
          console.log('route', route);
        }

      }

      customElements.define(MyEl.is, MyEl);
    </script>
  </dom-module>

  <my-el></my-el>
</body>
</html>
4

1 回答 1

1

为了改变route你必须使用双向绑定的值。由于iron-selector无法更改route观察者的值,因此不会被触发。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>

  <base href="//polygit.org/polymer+:master/components/">
  <script src="webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="import" href="polymer/polymer-element.html">
  <link rel="import" href="iron-selector/iron-selector.html">

</head>

<body>
  <dom-module id="my-el">
    <template>
    <style>
    .iron-selected{color:blue}
    </style>
    <p>Route value using two way binding in iron-selector: [[route]] </p>
      <iron-selector selected="{{route}}">
        <div>Item 1</div>
        <div>Item 2</div>
        <div>Item 3</div>
      </iron-selector>
      
      <p>Route value using one way binding in iron-selector: [[route]]</p>
      <iron-selector selected="[[route]]">
        <div>Item 1</div>
        <div>Item 2</div>
        <div>Item 3</div>
      </iron-selector>
      [iron-selector is working but it cannot update the value of route]
    </template>
    <script>
      class MyEl extends Polymer.Element {
        static get is() {
          return 'my-el'
        }

        static get properties() {
          return {
            route: {
              type: Number,
              notify: true,
              observer: '_routeChanged',
            },
          }
        }

        constructor() {
          super();
        }

        _routeChanged(route) {
          console.log('route', route);
        }

      }

      customElements.define(MyEl.is, MyEl);
    </script>
  </dom-module>

  <my-el></my-el>
</body>

</html>

您还可以使用在选定属性更改时触发selected-changediron-selector事件。例子:

<iron-selector on-selected-changed="_onSelectedChanged" selected="[[route]]">
 <div>Item 1</div>
 <div>Item 2</div>
 <div>Item 3</div>
</iron-selector>

_onSelectedChanged(e){
  console.log('route',e.detail.value);
}
于 2017-09-11T04:04:40.173 回答