2017-02-16 22 views
1

Я собираюсь немного серым здесь, пытаясь понять, как можно использовать несколько шаблонов в одном компоненте Polymer и разрешать определенный шаблон на основе атрибута.Polymer: несколько шаблонов для одного и того же компонента, основанного на атрибуте?

Вот сценарий:

Компонент

<dom-module id="py-test"> 
    <template> 
     Foo 
    </template> 
    <template> 
     Bar 
    </template> 
    <script> 
     Polymer({ 
      is: "py-test" 
     }) 
    </script> 
</dom-module> 

Markup

<py-test bar></py-test> 

Ожидаемый результат Если <py-test></py-test> имеет атрибут бара, в компонент должен использовать второй шаблон. В противном случае он должен использовать первый шаблон.

Кто-нибудь знает, как победить Полимер в подчинении?

// Редактировать

Мария отметила, дом-если в качестве возможного решения. Какая работа. Я использовал пример выше, чтобы добавить РОМ, если проверки:

<dom-module id="py-test"> 
    <template> 
     <template is="dom-if" if="[[foo]]"> 
      Foo 
     </template> 
     <template is="dom-if" if="[[bar]]"> 
      Bar 
     </template> 
    </template> 
    <script> 
     Polymer({ 
      is: "py-test", 
      properties: { 
       foo: { 
        type: Boolean, 
        value: true 
       }, 
       bar: { 
        type: Boolean, 
        value: false 
       } 
      } 
     }) 
    </script> 
</dom-module> 

Но я не понимаю, как я могу связать это с атрибутами, установленных на самых <py-test> элемента.

+1

Использовал бы опцию 'dom-if'? – Maria

+0

@Maria Это похоже на работу с dom-if, в том смысле, что я могу переключаться между шаблонами, проверяя правдивость конкретной функции. Но это не очень помогает, потому что я не вижу, как я могу связать эти логические результаты с конкретными атрибутами, установленными в элементе разметки. Есть идеи? –

+0

Возможно, это то, что вы ищете [железо-ленивые страницы] (https://github.com/TimvdLippe/iron-lazy-pages). Используйте поведение Polymer.Templatizer для штампа вашего шаблона на основе атрибута –

ответ

2

Вы почти находитесь в своем редактировании. Просто удалите начальные значения в объекте properties.

<dom-module id="py-test"> 
    <template> 
     <template is="dom-if" if="[[foo]]"> 
      Foo 
     </template> 
     <template is="dom-if" if="[[bar]]"> 
      Bar 
     </template> 
    </template> 
    <script> 
     Polymer({ 
      is: "py-test", 
      properties: { 
       foo: { 
        type: Boolean, 
       }, 
       bar: { 
        type: Boolean, 
       } 
      } 
     }) 
    </script> 
</dom-module> 

Вы можете использовать его как это:

<py-test foo></py-test> 
<py-test bar></py-test> 

Вот plunk.

Это может быть немного запутанным, как Полимер обрабатывает логические атрибуты. Если они присутствуют, соответствующее свойство равно true, иначе это false. Если вы устанавливаете начальные значения, вы мешаете этому.

+0

Отличное объяснение. Действительно, у Полимера есть свои причуды, но большинство фреймворков все равно. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^