2013-04-17 14 views
5

ho una matrice osservabile di oggettiopzioni Knockout CSS condizionale

question = { 
     ownerUserName: item.id, 
     text: item.text, 
     dataType: item.dataType, 
     personalized: item.personalized, 
     status: item.status, 
     actionUserName: item.actionUserName 
    } 

e una selezionata con le opzioni di questa matrice:

<select id="questId" style="width: 425px" data-bind="options: questionList, optionsText: 'text'"> 

Come con l'aiuto di eliminazione diretta posso fare in modo che se domanda .personalized == "Y" il colore del testo di questa domanda sarebbe verde?

risposta

4

La cosa migliore è la css binding

Un rapido adeguamento della documentazione per il vostro bisogno sarebbe

<div data-bind="text: personalized, css: personalizedStatus"> 
    Profit Information 
</div> 

<script type="text/javascript"> 
    question.personalizedStatus = ko.computed(function() { 
     return this.personalized() == "Y" ? "green" : "red"; 
    }, question); 

</script> 
<style> 
    .green {color:green;} 
    .red{color:red;} 
</style> 
+0

Dovrei creare un modello di domanda? – Skeeve

+0

A dire il vero non ne sono sicuro. Ho solo provato ad adattare l'esempio al tuo esempio di codice. Vorrei creare un modello di domanda solo per facilità d'uso. –

3

È possibile utilizzare foreach anziché le solite opzioni binding. Qualcosa di simile

<style> 
    .highlighted{ 
     background-color: red; 
    } 
</style 
<select id="questId" style="width: 425px" data-bind="foreach: questionList"> 
    <option data-bind="text: text, class: {highlighted: personalized == 'Y'}"> 
</select> 
+0

sei sicuro di questo codice: class: {evidenziato: personalizzato == 'Y'}, perché non funziona. attr: {class: "evidenziato"} funzionerà, però, ma non soddisfa i miei requisiti – Skeeve

+0

@Skeeve Sto usando questo codice nei miei progetti e funziona. L'unica cosa è che se 'personalizzato' è osservabile, allora dovresti scrivere 'customized() == 'Y'' – demkalkov

1

C'è anche un'opzione per impostare i dati-bind = "stile: {color: value? 'green': null} "

Non è l'opzione migliore (il migliore è impostare una nuova classe) ma è possibile