DaddioNTS
DaddioNTS

Reputation: 55

Knockout.js nested lists

I am trying to format a knock model that contains objects with two sub objects. When I try to include a header for the sub object the second one ends up outside the group I expect. Please let me know if there are issues with the coding or my expectations.

Expectation:

Header Prop1 Prop2 List1 Header List1 Item1 List1 Item2 List2 Header List 2 Item 1 List 2 Item 2

What I get:

Header Prop1 Prop2 List1 Header List1 Item1 List1 Item2

List 2 Item 1 List 2 Item 2

List2 Header

Code Is:

<div id="tourneys_in_progress">
    <h2>Open Tournaments</h2>
    <div id="tourneys">
        <ul data-bind="template: { name: 'tourneyTemplate', foreach: tourneys.CurrentTournaments }"></ul>
        <script id="tourneyTemplate" type="text/html">
        <li class="tourneys">
            <div class="tourney">
                <div data-bind="text: 'TournamentType: ' + TournamentTypeString"></div>
                <div data-bind="text: 'Number of Rounds: ' + Rounds" ></div>
                <div data-bind="text: 'Boards: ' + Boards" ></div>
                <div data-bind="text: 'Players per Board: ' + PlayersPerBoard"></div>
                <div data-bind="text: 'Time Control: ' + TimeControlString"></div>
                <div  data-bind="attr: { title: TournamentId }" class="join_tourney command">Cancel Tournament</div>
                <div  data-bind="attr: { title: TournamentId }" class="leave_tourney command">Start Round</div>
                <div  data-bind="attr: { title: TournamentId }" class="leave_tourney command">End Round</div>

                <div>
                <ul data-bind="template: { name: 'gamesTemplate', foreach: TournamentGames }"></ul>
                <ul data-bind="template: { name: 'playersTemplate', foreach: TournamentPlayers }"></ul>

                <h3>Current Tournament Games</h3>
                <script id="gamesTemplate" type="text/html">
                    <li class="players">
                        <div class="left_align" data-bind="text: 'Tournament Players: ' + TournamentPlayersList + '  '"/>
                        <div class="right_align" data-bind="text: GameStatusText" />
                        <div class="command">Set Game</div>
                    </li>
                </script>
                <h3>Current Tournament Players</h3>
                <script id="playersTemplate" type="text/html"> 
                    <li class="players">
                        <span class="left_align" data-bind="text: PlayerName + '  '"/>
                        <img data-bind="attr: { src: 'https://graph.facebook.com/' + FbId + '/picture?width=25&height=25' }" />
                        <span class="right_align" data-bind="text: PlayerRanking" />
                    </li>
                </script>
                </div>
        </li>
        </script>
    </div>
</div>

Thanks for your help.

Upvotes: 0

Views: 246

Answers (1)

DaddioNTS
DaddioNTS

Reputation: 55

I was able to get the formatting I wanted with the following html markup:

<div id="tourneys_in_progress">
    <h2>Open Tournaments</h2>
    <div id="tourneys">
        <ul data-bind="template: { name: 'tourneyTemplate', foreach: tourneys.CurrentTournaments }"></ul>
        <script id="tourneyTemplate" type="text/html">
        <li class="tourneys">
            <div class="tourney">
                <div data-bind="text: 'TournamentType: ' + TournamentTypeString"></div>
                <div data-bind="text: 'Number of Rounds: ' + Rounds" ></div>
                <div data-bind="text: 'Boards: ' + Boards" ></div>
                <div data-bind="text: 'Players per Board: ' + PlayersPerBoard"></div>
                <div data-bind="text: 'Time Control: ' + TimeControlString"></div>
                <div  data-bind="attr: { title: TournamentId }" class="join_tourney command">Cancel Tournament</div>
                <div  data-bind="attr: { title: TournamentId }" class="leave_tourney command">Start Round</div>
                <div  data-bind="attr: { title: TournamentId }" class="leave_tourney command">End Round</div>
                <div>
                    <h3>Current Tournament Games</h3>
                    <ul data-bind="template: { name: 'gamesTemplate', foreach: TournamentGames }"></ul> 
                    <h3>Current Tournament Players</h3>
                    <ul data-bind="template: { name: 'playersTemplate', foreach: TournamentPlayers }"></ul>

                    <script id="gamesTemplate" type="text/html">
                        <li class="players">
                            <p class="left_align" data-bind="text: 'Tournament Players: ' + TournamentPlayersList + '  '"></p>
                            <p class="right_align" data-bind="text: GameStatusText"></p>
                            <div class="command">Set Game</div>
                        </li>
                    </script>

                    <script id="playersTemplate" type="text/html"> 
                        <li class="players">
                            <span class="left_align" data-bind="text: PlayerName + '  '"/>
                            <img data-bind="attr: { src: 'https://graph.facebook.com/' + FbId + '/picture?width=25&height=25' }" />
                            <span class="right_align" data-bind="text: PlayerRanking" />
                        </li>
                    </script>
                </div>
            </div>
        </li>
        </script>
    </div>
</div>

Thanks for the input.

Upvotes: 1

Related Questions