Ненужные узлы DOM замедляют работу веб-приложений. Следовательно, мы должны избегать таких потерь, когда это возможно.

Я часто замечаю этот антипаттерн в наших полимерных элементах:

<dom-module id="my-element">
  <template>
    <div>
      <span>Element 1</span>
      <span>Element 2</span>
    </div>
  </template>
</dom-module>

div в основном выступает в качестве держателя элементов в шаблоне. Этого держателя div можно легко избежать, стилизовав сам основной элемент:

<dom-module id="my-element">
  <style>
    :host {
      display: block;
    }
  </style>
  <template>
    <span>Element 1</span>
    <span>Element 2</span>
  </template>
</dom-module>

Сложность может возникнуть, если вам нужно установить атрибут держателя для стиля, например:

<dom-module id="my-element">
  <style>
    #holder[has-error] .text {
      color: red;
    }
  </style>
  <template>
    <div id="holder" has-error="[[hasError]]">
      <span class="text">[[text]]</span>
      ...

Но у Polymer есть отличное решение и для таких ситуаций! Просто отразите свойство на самом хосте с помощью reflectToAttribute:

<dom-module id="my-element">
  <style>
    :host[has-error] .text {
      color: red;
    }
  </style>
  <template>
    <span class="text">[[text]]</span>
  </template>
  ...
<script>
(function() {
  Polymer({
    is: "my-element",
    properties: {
      hasError: {
        type: Boolean,
        reflectToAttribute: true
      },
    ...

Удачного кодирования!

Хотите узнать больше о Polymer? Посмотрите все наши Публикации на Medium о Polymer.

Фото: Тим Коллинз