Как получить ключ и значение в foreach - PullRequest
0 голосов
/ 04 июня 2018

Я создал шаблон выбивки .... Как получить ключ и значение из foreach в этом шаблоне ...

 <!-- ko foreach: { data: getCouponCodes(), as: 'key => value' } --> 

Мне нужно получить ключ и значение

enter image description here

1 Ответ

0 голосов
/ 04 июня 2018

Если 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 -->
...