Reputation: 11
I have a problem with nested foreach when using knockout.js. Below is description
MyViewModel(){
filteredRecords();
columns();
}
RecordModel(){
A,
B,
C
}
ColumnModel{
Visible,
ColumnName
}
Requirement is, if column.Visible == 1, let show the corresponding ColumnName in ReportModel. In the data-bind="value: records.column.Column_Name(), I try to get the correct path but not sucessful yet, please give me some advices , thanks a lot.
<div>
<!-- ko foreach: {data: filteredRecords(), as: 'records'} -->
<ul class="tableBody">
<li class="firstLevel">
<ul>
<li class="col col01"># : <span data-bind="text: records.ID"></span></li>
<!-- ko foreach: {data: $parent.columns(), as: 'column'} -->
<!-- ko if: column.Visible() == 1 -->
<li class="col col0"><input class="input0" **data-bind="value: records.column.Column_Name()"** /></li>
<!-- /ko -->
<!-- /ko -->
</ul>
</li>
</ul>
<!-- /ko -->
</div> enter code here
Upvotes: 1
Views: 1766
Reputation: 89171
<ul data-bind="foreach: { data: filteredRecords, as: 'record' }">
<li><strong>#</strong> : <span data-bind="text: ID"></span>
<ul data-bind="foreach: { data: $root.columns, as: 'column' }">
<!-- ko if: column.Visible -->
<li>
<strong data-bind="text: column.ColumnName"></strong>:
<span data-bind="text: record[column.ColumnName()]"></span>
</li>
<!-- /ko -->
</ul>
</li>
</ul>
You could swap the inner <ul>
for a <!-- ko -->
, if you wish.
http://jsfiddle.net/MizardX/K7Lzs/
Upvotes: 3