2013-04-18 12 views
9

oryginalne pytanieWstawianie wiązania "za"?

Czy ktoś ma lub wie o wiążącym dla nokaut, która pozwoliłaby zachowania podobnego do pętli for? Mogę zrobić foreach, co chcę, ale byłoby miło, gdybym nie musiał tego robić w ten sposób.

Edycja 2

Próbuję utworzyć wiersze tabeli w oparciu o wybór użytkownik czyni. W niektórych przypadkach potrzebuję x wierszy, gdzie x jest długością tablicy, innym razem x oznacza największą liczbę wierszy, które będą potrzebne do wyświetlenia n liczby tablic.

Ex: image1 jest zbudowany w oparciu o 4 różne tablice, wszystkie o rozmiarze image2 jest zbudowany z tej samej tablicy i w tym przypadku jest podwojony.

enter image description here enter image description here

<div data-bind="if: selectedTab()"> 
<table> 
<thead> 
    <tr> 
    <td> 
     <div class="a-i-post-All"></div> 
    </td> 
    <!-- ko foreach:$root.selectedTab().races--> 
    <td> 
     <input type="checkbox" /> 
    </td> 
    <!-- /ko --> 
    </tr> 
</thead> 
<tbody data-bind="foreach: selectedTab().runners"> // <-- This is an empty array created by the max number of Runners in the selectedTabs array of Races 
    <tr> 
    <td> 
     <div class="a-i-post"></div> 
    </td> 
    <!-- ko foreach:$root.selectedTab().races--> 
    <td> 
     <!-- ko if: Runners.length > $parentContext.$index()--> 
     <input type="checkbox" /> 
     <!-- /ko --> 
    </td> 
    <!-- /ko --> 
    </tr> 
</tbody> 

Powyższy działa dobrze i tworzy to, co chcę, ale nie lubię konieczności włączania selectedTab.runners od kilku do pustej tablicy po prostu sprawiają, że pętla n razy aby utworzyć wiersze. Jestem otwarty na sugestie. Uwaga Od momentu, kiedy opublikowałem to pytanie, znacznie skorygowałem ten kod, a teraz sprowadziłem się tylko do jednego wystąpienia związanego z moim początkowym pytaniem.

+0

Dlaczego nie chcesz używać foreach z indeksu $? –

+0

Chcę być w stanie foreach na liczbę, a nie tablicę – Zholen

+2

To nie jest tak naprawdę dla Knockout. Próbuję wymyślić przykład z prawdziwego świata, w którym trzeba będzie powtórzyć określoną liczbę razy "x" w JavaScript, gdzie nie można tego zrobić po stronie serwera po pierwszym wygenerowaniu widoku. Brakuje mi. Być może, jeśli rzeczywiście powiedziałeś nam, co tak naprawdę chcesz zrobić, ktoś może ci pokazać lepszy sposób. –

Odpowiedz

12

Moje powiązanie Repeat robi dokładnie to.

<tbody> 
    <tr data-bind="repeat: { foreach: selectedTab().runners, index: '$runner' }"> 
    <td> 
     <div class="a-i-post"></div> 
    </td> 
    <td data-bind="repeat: selectedTab().races"> 
     <!-- ko if: $item().Runners.length > $runner --> 
     <input type="checkbox" /> 
     <!-- /ko --> 
    </td> 
    </tr> 
</tbody> 
+0

Dziękuję za odpowiedź na moje pierwsze pytanie. Wydaje się, że robi to, co chcę, ale w tym momencie ponownie przeanalizowałem mój kod i nie muszę już zajmować się takimi działaniami, mniej używam go ze względu na wydajność. – Zholen

+0

To wygląda naprawdę interesująco Michael! –

3

można zrobić coś takiego:

<div data-bind="foreach: [0,0,0,0,0]"> 
    <span data-bind="text: $index"></span> 
</div> 

a dostaniesz elementów 0-4.

Ale, jak powiedział Chris w komentarzach, wydaje się to dziwne. Powiedz nam, co próbujesz zrobić, a my wskażemy ci właściwy kierunek.

4

można utworzyć obiekt Array:

<!-- ko foreach: new Array(the_length_you_need) --> 
     <span>&#9733;</span> 
    <!-- /ko --> 

to wydrukuje gwiazdkę dla the_length_you_need razy

Powiązane problemy