Polymer 1.x:通过单击 paper-card 标题切换 iron-collapse

Polymer 1.x: Toggle iron-collapse by clicking paper-card heading

我只想通过单击 paper-cardheading 来切换 paper-card 元素内容的 open/closed 状态。

当我在打开的内容中单击时,我希望卡片保持打开状态。而不是切换到关闭状态。

Open this jsBin to read further and demo what I'm describing.

http://jsbin.com/kecemorojo/edit?html,输出
<!doctype html>
<head>
  <meta charset="utf-8">
  <!---- >
  <base href="https://polygit.org/components/">
  <!---- >
  Toggle below/above as backup when server is down
  <!---->
  <base href="https://polygit2.appspot.com/components/">
  <!---->
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">
  <link href="paper-card/paper-card.html" rel="import">
  <link href="iron-collapse/iron-collapse.html" rel="import">
</head>
<body>

<dom-module id="x-element">

<template>
  <style></style>
  <paper-card heading="Click Me to Open" on-tap="_toggleCollapse">
    <iron-collapse id="collapse">
      <div class="card-content">
        I want to do stuff inside this content area. Some of it will involve clicking things. But when I click things, I want this paper card to remain open and not close. So I can still see this text and the other things I need to click on. But, unfortunately, with this setup, when you click on this text, the card closes and no one can read the text anymore. I'm looking for a solution that let's me open and close the card by clicking on the header "Click Me to Open" only. See what I mean by clicking on this paragraph right now. Watch it close. And not remain open like I want it.
      </div>
    </iron-collapse>
  </paper-card>
</template>

<script>
  (function(){
    Polymer({
      is: "x-element",
      _toggleCollapse: function() {
        this.$.collapse.toggle();
      },
    });
  })();
</script>

</dom-module>

<x-element></x-element>

</body>
  _toggleCollapse: function(e) {
    if (!e.target.classList.contains('card-content')) {
        this.$.collapse.toggle();
    }
  }

In addition to the accepted answer,至少还有另外两个解:

if (e.target.classList.contains('title-text'))

here

if (e.target.classList.contains('title-text', 'style-scope', 'paper-card'))

here

根据具体情况,根据在 paper-card content 部分中单击的内容,一个或另一个可能会更好。

http://jsbin.com/kacatozolo/1/edit?html,输出
<!doctype html>
<head>
  <meta charset="utf-8">
  <!---- >
  <base href="https://polygit.org/components/">
  <!---- >
  Toggle below/above as backup when server is down
  <!---->
  <base href="https://polygit2.appspot.com/components/">
  <!---->
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import">
  <link href="paper-card/paper-card.html" rel="import">
  <link href="iron-collapse/iron-collapse.html" rel="import">
</head>
<body>

<dom-module id="x-element">

<template>
  <style></style>
  <paper-card heading="Click Me to Open" on-tap="_toggleCollapse">
    <iron-collapse id="collapse">
      <div class="card-content">
        I want to do stuff inside this content area. Some of it will involve clicking things. But when I click things, I want this paper card to remain open and not close. So I can still see this text and the other things I need to click on. But, unfortunately, with this setup, when you click on this text, the card closes and no one can read the text anymore. I'm looking for a solution that let's me open and close the card by clicking on the header "Click Me to Open" only. See what I mean by clicking on this paragraph right now. Watch it close. And not remain open like I want it.
      </div>
    </iron-collapse>
  </paper-card>
</template>

<script>
  (function(){
    Polymer({
      is: "x-element",
      _toggleCollapse: function(e) {
        if (e.target.classList.contains('title-text', 'style-scope', 'paper-card')) {
          this.$.collapse.toggle();
        }
      },
    });
  })();
</script>

</dom-module>

<x-element></x-element>

</body>