How can i make custom Polymer element hidden?

user3103137 picture user3103137 · Dec 28, 2013 · Viewed 8.1k times · Source

For experiments I use the custom element tute-stopwatch from https://www.dartlang.org/docs/tutorials/polymer-intro/

When I set the attribute '.hidden = true' for buttons, these buttons hide successfully, but the element tute-stopwatch doesn't.

  void addChild(Event e, var detail, Node target) {
    ..
    stopButton.hidden = true;
    startButton.hidden = true;
    resetButton.hidden = true;

    this.hidden = true; 
}

When i use subtemplate in tute_stop_watch.html:

<template if="{{ visible }}" id="innerTemplate">

and in tute_stop_watch.dart:

  void enteredView() {
    super.enteredView();
    startButton = $['startButton']; // $['startButton'] == null
    innerTemplate =$['innerTemplate'] // find correct, but innerTemplate.childNodes == []

I try make element with all abilities tute-stopwatch visible on demand.

Answer

G&#252;nter Z&#246;chbauer picture Günter Zöchbauer · Dec 29, 2013

Add the following style to your polymer elements:

<polymer-element name="tute-stopwatch">
  <template>
    <style>
      /* old style for current Dartium */
      @host {
        * {
          display: inline-block;
          position: relative;
          overflow: hidden;
        }

        [hidden], .hidden {
          display: none;
        }
      }

      /* new style for Chromium */
      :host {
        display: inline-block;
        position: relative;
        overflow: hidden;
      }

      :host([hidden]:host, .hidden:host) {
        display: none;
      }
    </style>

    <button>xxx</button>
    ...

  <template>
  <script type="application/dart" src='toute-stopwatch.dart'></script>
</polymer-element>

The you can make the element visible/hidden by setting the hidden attribute or add/remove the class hidden.