2014-12-01 14 views
12

Mam element wewnątrz komponentu polimerowego i chcę dodać klasę css warunkowo.Warunkowo dodaj klasę css w polimerze

<div class="bottom {{completed: item.completed}}"> 

jeśli item.isCompleted ma wartość true, następnie dodaj klasę .completed.

Jednak mam następujący błąd:

nieprawidłowej składni wyrażeń: zakończony ?: item.completed

nie chcę umieścić poddrzewa otwór wewnątrz szablonu warunkowego. Czy można użyć wyrażenia wewnątrz znacznika html? Używam ostatniej wersji polimeru, czy ta funtionalność migrowała lub zastępowała w jakikolwiek sposób?

+0

Czy należy dodać kod/HTML, który pokazuje, co wypróbowałeś? Oto dokument jak powiązać z 'klasą' https://www.polymer-project.org/docs/polymer/expressions.html#tokenlist –

+0

Edytowałem oryginalne pytanie, brakowało linii kodu. Teraz jest widoczny –

Odpowiedz

10

aktualizacja Polymer 1,0

<div class$="{{getClasses(item.completed)}}"> 
getClasses: function (completed) { 
    var classes = 'bottom' 
    if(completed) classes += ' completed'; 
    return classes; 
} 

Nawet gdy completed można odczytać z this.item.completed wewnątrz getClasses() ważne jest, aby przekazać go jako parametr z wiązania. W ten sposób Polimer ponownie ocenia funkcję getClasses(item.completed) przy każdej zmianie.

oryginalny - Polymer 0,5

To powinno wyglądać

<div class="bottom {{ {completed: item.completed } | tokenList }}"> 

Zobacz docs więcej szczegółów: http://polymer-project.org/docs/polymer/expressions.html#tokenlist

+1

Wielkie dzięki, oszalałem na ten temat! –

16

Technika tokenlist była ważna w Polymer 0.5, ale została zaniechana.

Jak Polimerowych 1.2, następujące prace:

<dom-module ...> 
    <template> 
    <div class$="bottom {{conditionalClass(item.completed)}}"></div> 
    </template> 
    <script> 
    Polymer({ 
     ... 
     conditionalClass: function(completed) { 
     return completed ? 'completed' : ''; 
     } 
    }); 
    <script> 
</dom-module> 

zobaczyć podobne pytanie: Polymer 1.0 - Binding css classes

+0

To jest teraz poprawna odpowiedź. – jpodwys

+2

Co robi '$ ='? Nie widziałem, żeby to zostało wyjaśnione gdziekolwiek. Wygląda na to, że potrzebuję go do tego scenariusza, chociaż w innych miejscach, w których go widziałem, użyto 'simple' =' wystarcza. – Guss

+1

'$ =' używane jest do wiązania atrybutów (takich jak: class, style, href, itp.), W przeciwieństwie do właściwości: https://www.polymer-project.org/1.0/docs/devguide/data -binding.html # binding wiązania – AlexO

1

najprostszym sposobem, aby to zrobić:

<template> 
    <style is="custom-style"> 
     .item-completed-true { background: red; } 
    </style> 
    <div class$="bottom item-completed-[[item.completed]]"></div> 
</template>