Polymer 1.0无法找到纸质菜单或纸质项目的事件

ror*_*ray 7 polymer polymer-1.0

升级到Polymer 1.0,我如何监听/捕获改变铁菜单行为的"focusedItem"?我看不到项目更改的任何事件或属性更改侦听器,即在纸张菜单中更改纸张项目选择.我在这里看不到任何此类事件:https://elements.polymer-project.org/elements/iron-menu-behavior?active = Polymer.IronMenuBehavior

Ada*_*ian 9

我还没有找到任何关于此的文件(也许其他人可能会有更好的运气),但你正在寻找的事件是iron-selectiron-deselect.这两个事件都使用处理程序格式:eventHandler(e, details),其中:

  • e是的CustomEvent.
  • details是一个对象,其item属性指向已选择或取消选择的元素.

我已经在Plunker上设置了一个你可以玩的演示.它有一个样品菜单,将记录都edetails来自iron-selectiron-deselect事件控制台.

然而,虽如此,如果您能够避免使用该事件而是使用绑定,我会建议首先使用该路由.如果这是在自定义元素中,您可以,例如,执行:

<dom-module id="my-custom-element">
  <template>
    <div>
      <span>[[selectedMessage]]</span>
      <span>[[oldSelectedMessage]]</span>
    </div>
    <paper-menu selected="{{selectedIndex}}">
      <paper-item>This is item #0</paper-item>
      <paper-item>This is item #1</paper-item>
      <paper-item>This is item #3</paper-item>
    </paper-menu>
  </template>
</dom-module>

<script>
  Polymer({
    is: 'my-custom-element',
    properties: {
      selectedIndex: {
        type: Number,
        value: 0,
        observer: '_selectedIndexChanged'
      }
    },
    _selectedIndexChanged: function(newIndex, oldIndex) {
      if (typeof newIndex === 'number') {
        this.selectedMessage = 'You selected item #' + newIndex + '.';
      }
      if (typeof oldIndex === 'number') {
        this.oldSelectedMessage = 'Before, you had item #' + oldIndex + ' selected.';
      }
    }
  });
</script>
Run Code Online (Sandbox Code Playgroud)


Cha*_*ton 7

我发现人们在处理聚合物时经常喜欢使事情过于复杂.这是一个简单的方法:

JS

var menu = document.querySelector("#myMenu");
menu.addEventListener("iron-select", function(){
     console.log(menu.selected);                           // index
     console.log(menu.selectedItem.getAttribute("value")); // value
});
Run Code Online (Sandbox Code Playgroud)

HTML

<paper-menu id="myMenu">
  <paper-item value="one">Foo</paper-item>
  <paper-item value="two">Bar</paper-item>
</paper-menu>
Run Code Online (Sandbox Code Playgroud)


wen*_*ner 5

有一个铁上选择.

所以你可以做到

      <paper-menu id="categoryMenu" on-iron-select="selectCategory">
        <template is="dom-repeat" items="{{categories}}">
          <paper-item data-type="{{item.code}}">{{item.name}}</paper-item>
        </template>
        <paper-item>More</paper-item>
      </paper-menu>
Run Code Online (Sandbox Code Playgroud)

脚本

app.selectCategory = function (e, item) {
    if (!app.categories) {
      return;
    }
    app.category = app.categories[app.$.categoryMenu.indexOf(item.item)];
    console.log('Select category ', app.category)
  };
Run Code Online (Sandbox Code Playgroud)

但是没有关于此的文档,是事件被触发时的行.