Отменить выбор элемента в бумажном меню после щелчка

Я использую полимер 1.0.9 для элемента paper-menu, но поведение по умолчанию не совсем такое, как мне бы хотелось.

Когда вы выбираете элемент в paper-menu, этот элемент переключается. Чтобы снова выбрать тот же элемент, вам придется выбрать другой элемент в меню, а затем повторно выбрать первый.

На данный момент это работает так: https://elements.polymer-project.org/elements/paper-menu?view=demo:demo/index.html

Но я хотел бы поведение обычной кнопки, но я все еще хочу «бесплатное» поведение, которое идет с paper-menu.

Есть ли умный способ отменить выбор кнопки сразу после того, как вы ее нажали? Это мое меню:

<paper-menu id= "action-menu">
  <template is="dom-repeat" items="{{actions}}" as="action">
    <paper-icon-item id={{action.attributes.id}}>
      <iron-icon icon="{{action.attributes.icon}}" item-icon>
      </iron-icon>
        <p>{{action.attributes.title}}</p>
    </paper-icon-item>
  </template>
</paper-menu>

person Jonathan Andersson    schedule 17.08.2015    source источник
comment
Разве одиночный/множественный выбор не является единственным поведением paper-menu? Если вы этого не хотите, вам, вероятно, вообще не следует использовать paper-menu, вместо этого как насчет paper-material с кучей paper-button?   -  person Justin XL    schedule 17.08.2015
comment
Да, я знаю, но меню «Бумага» предоставляет некоторые бесплатные функции, которые мне бы хотелось, и если нет способа решить эту проблему, мне придется вместо этого использовать кнопки.   -  person Jonathan Andersson    schedule 18.08.2015


Ответы (2)


Я решил эту проблему, установив для свойства selected значение null в обработчике событий для меню. Работает хорошо.

В качестве альтернативы (если, как и я, вы используете элемент <paper-menu-button>, вы могли бы также использовать paper-dropdown-close на <paper-menu-button> или <paper-dropdown-menu>.

PS: я знаю, что это старый вопрос, но на https://github.com/Polymer/paper-menu-button/issues/56 и сегодня у меня была именно эта проблема - так что, возможно, это кому-то пригодится.

person ootwch    schedule 01.11.2016

Вы можете попробовать прослушать событие активации железа, и когда указанный элемент выбран, вы можете вызвать menu.select(index), чтобы отменить его выбор.

что-то вроде [псевдокод следует]:

<paper-menu id="action-menu" on-iron-activate="onMenuActivate">

...

onMenuActivate: function(event, detail) {
    var menu = Polymer.dom(event).localTarget,
        name = event.detail.selected,
        selected = (menu.selectedValues || []).indexOf(name) == -1;

    if (name == MY_SPECIAL_INDEX && selected) {
          menu.select(name);
    }
}

Событие активации запускается перед событием выбора, поэтому необходимо проверить, не находится ли выбранный элемент нет в текущем списке выбранных элементов.

person urandom    schedule 17.08.2015