2013-04-17 16 views
5

Mam zaobserwowania tablicę obiektówopcje Knockout css warunkowy

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

I wybierz opcje z tej tablicy:

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

Jak za pomocą nokaut mogę zrobić tak, że jeśli pytanie .personalized == Kolor "Y" tekstu tego pytania byłby zielony?

Odpowiedz

4

Najprościej jest css binding

Szybkie dostosowanie dokumentacji do potrzeb byłoby

<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

Czy powinienem stworzyć model pytań? – Skeeve

+0

Szczerze mówiąc nie jestem pewien. Próbowałem po prostu zaadaptować przykład do próbki kodu. Stworzyłbym model pytań tylko po to, by ułatwić korzystanie z niego. –

3

Możesz użyć foreach zamiast zwykle opcji wiązania. Coś jak

<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

czy jesteś pewny co do tego kodu: class: {highlighted: personalized == 'Y'}, ponieważ nie działa. attr: {class: "highlighted}} zadziała, ale nie spełnia moich wymagań. – Skeeve

+0

@Skeeve Używam tego kodu w moich własnych projektach i to działa. Jedyne, co można zrobić, jeśli "spersonalizowany" jest obserwowalny, należy napisać 'personalized() == 'Y'' – demkalkov

1

Istnieje również możliwość ustawienia danych-wiążą = "style: {color: value? 'green': null} "

To nie jest najlepsza opcja (najlepiej jest ustawić nową klasę), ale jest to możliwe