2012-03-16 10 views
5

Próbuję znaleźć sposób zastosowania klasy css do pierwszego rekordu podczas wiązania tablicy za pomocą foreach w Knockout. Mój końcowy wynik musi wyglądać tak.Stosowanie klasy do pierwszej wartości w tablicy, gdy szablon foreach wiąże się z Knockout

var viewModel = function() { 
    this.records = ["A", "B", "C"] 
}; 

z szablonem, który powoduje:

<tbody> 
    <tr> 
     <td class="special-class">A</a> 
     <td>A</a> 
     <td>A</a> 
    </tr> 
</tbody> 

jedyną opcją mogę wymyślić robi się afterRender i znalezienie pierwszego dziecka i robi addClass się przy użyciu jQuery. Czy są jakieś lepsze opcje?

UPDATE:

Zdaję sobie sprawę, że popełniłem błąd w moim przykładzie, że moje rzeczywiste dane jest nieco bardziej skomplikowana, więc o to, co moje szablony wyglądać następująco:

<div id="calendar"> 
    <table> 
     <thead> 
      <tr data-bind="template: {name: 'calendarHeadTemplate', foreach: days}"></tr> 
     </thead> 
     <tbody data-bind="template: {name: 'calendarTemplate', foreach: timeSlots}"></tbody> 
    </table> 
</div> 

<script id="calendarHeadTemplate" type="text/html"> 
    <th data-bind="text: $data"></th> 
</script> 

<script id="calendarTemplate" type="text/html"> 
    <tr data-bind="foreach: $data"> 
     <td data-bind="text: $data"></td> 
    </tr> 
</script> 

i tu jest co dane wygląda następująco:

var viewModel = function() { 
    this.days = ["Thu 15", "Fri 16"]; 
    this.timeslots = [["1","2"],["3","4"]]; 
}; 
+0

css pierwszego dziecka jest przy stole? – madcapnmckay

+0

Potrzebuję addClass ("specjalnej klasy") do pierwszego każdego –

Odpowiedz

5

W swojej tempalte, spróbuj:

<td data-bind="css: {'special-class' : $root.records[0] === $data}"></td> 
+0

Otrzymuję błąd "Nie można odczytać właściwości" 0 "niezdefiniowanej;". Zaktualizowałem swoje posty z moim szablonem i viewmodelem, ponieważ jest to nieco bardziej skomplikowane niż wtedy, gdy je pokazywałem. –

+0

to jak sprawiłem, że mój td wyglądał btw. –

+0

ahhh to rozgryzł. W moim przypadku nie nazywało się to rekordami. Zmieniłem sposób, w jaki działają moje rzeczy, więc zamiast tego użyłem $ parent, ale ta odpowiedź dostarczyła mi potrzebnych informacji. –

2

Poprzednie rozwiązanie nie działa w moim przypadku. użyłem $ index == 0, aby zobaczyć, czy jest to pierwsze dziecko, ja wędruję jak dostać się do ostatniego potomka

<td data-bind="css: {'special-class' : $index() == 0}"></td> 
Powiązane problemy