Я использую Knockout.js как способ динамически обновлять представление из ответа JSON. JSON выглядит следующим образом:
var data = {
"Properties": {
"Engine Capacity": "1499cc",
"Doors": 3,
"Extras": [
"LED lights",
"4WD"
],
"Model": "123a"
}
};
Я нашел способ в JavaScript создать элементы <li>:
for (var field in data['Properties']) {
var value = data['Properties'][field];
var out = '<li>' + field + ': ' + value + '</li>';
console.info(out);
// <li>Engine Capacity: 1499cc</li>
// <li>Doors: 3</li>
}
Я знаю, что это не идеальный способ, поскольку создание HTML в JavaScript - не лучшая практика. Есть способ распечатать значение в Knockout, но с жестко запрограммированными значениями:
<ul data-bind = "foreach:$root.Properties">
<li data-bind = "text:$data:Doors"></li>
<li data-bind = "text:$data.Model"></li>
Но мне было интересно, можно ли сделать так, чтобы Knockout.js выглядел так, как я возвращаю в коде JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот как это сделать:
var data = {
"Properties": {
"Engine Capacity": "1499cc",
"Doors": 3,
"Extras": [
"LED lights",
"4WD"
],
"Model": "123a"
}
};
var viewModel = {
data: ko.mapping.fromJS({"Properties": data.Properties})
};
ko.applyBindings(viewModel);
<ul data-bind = "foreach: data.Properties">
<li>
<b data-bind = "foreachprop: props"> :
<span data-bind = "value"> </span>
</b>
</li>
</ul>
Дополнительная ссылка:
Вам нужно сделать какое-то отображение. Может
ko.mapping.fromJSON?