Если getCouponCodes
возвращает массив объектов, то нет никакого «специального» нокаутирующего способа получения ключей и значений этих объектов непосредственно в привязке.
Другими словами:вам придется использовать обычный javascript в вашем представлении или модели представления.Существует много возможных решений, вот два для начала:
Предпочтительный: используйте computed
для преобразования данных в желаемый формат:
const getCouponCodes = () => [ { name: "John" }, { name: "Kevin" } ]
ko.applyBindings({
couponData: ko.pureComputed(() =>
// Use whatever logic you require to return a viewmodel of "key" and "value"
getCouponCodes()
.reduce(
// You can also use: `for ... in`, `Object.keys`, etc.
// search for "Iterate over js object" to learn more
(data, coupon) => data.concat(Object.entries(coupon)),
[]
)
// Here we construct a simple viewmodel to make our data-binds easier
.map(([k, v]) => ({ key: k, value: v }))
)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko foreach: couponData -->
<div data-bind="text: key + ': ' + value"></div>
<!-- /ko -->
Альтернативное использование Object.keys
и $parent
прямо в ваших глазах
ko.applyBindings({
getCouponCodes: () => [ { name: "John" }, { name: "Kevin" } ]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko foreach: getCouponCodes() -->
<!-- ko foreach: Object.keys($data) -->
<div data-bind="text: $data + ': ' + $parent[$data]"></div>
<!-- /ko -->
<!-- /ko -->