У меня есть вложенное JSON как это:Отображение вложенных JSON как вложенный список с помощью knockout.js
[
{
"Run 1": {
"1.2.0": {
"Server": {
"TestSuite 1": [
{
"version": "1.2.0",
"type": "server",
"testdef": "TestSuite 1",
"testcaseid": "TestCase 1",
"status": "pass"
},
{
"version": "1.2.0",
"type": "server",
"testdef": "TestSuite 1",
"testcaseid": "TestCase 2",
"status": "fail"
}
],
"TestSuite 2": [
{
"version": "1.2.0",
"type": "server",
"testdef": "TestSuite 2",
"testcaseid": "TestCase 1",
"status": "pass"
}
]
}
}
}
}
]
Я хочу, чтобы отобразить его на странице HTML как неупорядоченный список, как это:
но я вижу, последний элемент повторяется несколько раз:
Это HTML с knockout.j ы привязок:
<div class="row">
<div class="tree">
<ul data-bind="foreach: {data: testResults, as: 'item'}">
<li data-bind="foreach: {data: Object.keys(item), as: 'key'}"><span data-bind="text: 'Run' + key"></span>
<ul data-bind="foreach: {data: item[key], as: 'item2'}" class="child">
<li data-bind="foreach: {data: Object.keys(item2), as: 'key2'}"><span data-bind="text: key2"> </span>
<ul data-bind="foreach: {data: item2[key2], as: 'item3'}" class="child">
<li data-bind="foreach: {data: Object.keys(item3), as: 'key3'}"><span data-bind="text: key3"> </span>
<ul data-bind="foreach: {data: item3[key3], as: 'item4'}" class="child">
<li data-bind="foreach: {data: Object.keys(item4), as: 'key4'}"><span data-bind="text: key4"> </span>
<ul data-bind="foreach: {data: item4[key4], as: 'item5'}" class="child">
<li data-bind="foreach: {data: Object.keys(item5), as: 'key5'}"><span data-bind="text: item5.testcaseid, css : {'bg-success' : item5.status == 'pass', 'bg-danger' : item5.status == 'fail'}"> </span><br></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
testResults
является ko.observableArray() в моей модели представления, которая содержит описанную выше JSON.
Что бы правильный способ отображения элементов листа только один раз
Спасибо. Это решение работает для того, чего я пытаюсь выполнить. Я прочитаю ваш другой ответ и пойму, как создается пользовательская привязка. Для вашего другого предложения, сопоставляя приведенные выше JSON с массивами, это были бы вложенные массивы вместо вложенных словарей правильно? – Bharat
Хорошо, что я имел в виду, по существу, это отображение, сделанное в обработчике привязки 'foreachprop'. Каждый словарь будет преобразован в массив пар ключ/значение. Дело в том, чтобы преобразовать его в нечто, что можно обрабатывать изначально, поэтому вы не ставите эту сложность в свои представления. –