简体   繁体   中英

knockout foreach numeric array

i have this array:

[{"room_id":"1","room_name":"CDI","workers":[[{"worker_id":"12","worker_name":"FF","worker_grade":"Q2"},{"worker_id":"13","worker_name":"Test","worker_grade":"Q1"}],[{"worker_id":"12","worker_name":"FF","worker_grade":"Q2"},{"worker_id":"13","worker_name":"Test","worker_grade":"Q1"}],[],[],[{"worker_id":"13","worker_name":"Test","worker_grade":"Q1"}]]},{"room_id":"2","room_name":"DD","workers":[[],[],[],[{"worker_id":"12","worker_name":"FF","worker_grade":"Q2"},{"worker_id":"13","worker_name":"Test","worker_grade":"Q1"}],[]]}]

My problem is a loop in y viewmodel:

 <tbody data-bind="foreach: rooms">
            <tr>
                <th data-bind="text: room_name"></th>
                <!--ko foreach: workers-->
                <td>
                <!--ko foreach: 0-->
                <!--ko text: worker_name--><!--/ko-->
                    <!--/ko-->
                </td>
                <td>
                    <!--ko foreach: 1-->
                    <!--ko text: worker_name--><!--/ko-->
                    <!--/ko-->
                </td>
                <td>
                    <!--ko foreach: 2-->
                    <!--ko text: worker_name--><!--/ko-->
                    <!--/ko-->
                </td>
                <td>
                    <!--ko foreach: 3-->
                    <!--ko text: worker_name--><!--/ko-->
                    <!--/ko-->
                </td>
                <td>
                    <!--ko foreach: 4-->
                    <!--ko text: worker_name--><!--/ko-->
                    <!--/ko-->
                </td>
                <!--/ko-->
            </tr>
        </tbody>

Because the arrays after workers aren't associative, I can't cycle through it. But how can I now go through it and display the other arrays like:

[{"worker_id":"12","worker_name":"Adriaan Wind","worker_grade":"Q2"},{"worker_id":"13","worker_name":"Test","worker_grade":"Q1"}]

The solution above doesn't work.

I think you need to add name like "rooms" for room binding and "workers" for the workers related bindings. And then you can bind your details in following manner

  ko.applyBindings( { "rooms" : [{ "room_id":"1","room_name":"CDI", "workers":[{"worker_id":"12", "worker_name":"FF", "worker_grade":"Q2"}, {"worker_id":"13", "worker_name":"Test", "worker_grade":"Q1"} ]} ]}); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.0.0/knockout-min.js"></script> <div data-bind="foreach: rooms"> Room <span data-bind="text:room_name "></span> <div data-bind="foreach: workers"> Worker: <span data-bind="text: worker_name"></span><hr/> </div> </div> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM