Mają wymóg, w którym muszę powiązać obiekt w atrybucie value, ponieważ KnockoutJs wysyłają wartość jako pierwszy parametr w zdarzeniu checkbox. Gdy jest przekazywany jako pojedyncza wartość, wszystko jest w porządku.

<div data-bind="foreach: Items">
   <input type="checkbox" value data-bind="attr: { value: id }, checked: selectedVal">

this.selectedVal.subscribe((newVal: any) => {
  alert(newVal);
});

Chcę przekazać sam obiekt iterowanego elementu, a nie jedną właściwość elementu iterowanego.

Items = [
  {
    id: 1,
    name: 'Adam',
  },
  {
    id: 2,
    name: 'Bailey',
  },
  {
    id: 3,
    name: 'Cathy',
  },
]

Przy subskrypcji chcę cały obiekt z id i nazwą, daj mi znać, jak mogę to zrobić?

0
Michael Philips 20 listopad 2018, 13:19

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć checkedValue: $data, aby pole wyboru zapisał cały obiekt. Na przykład:

const items = [
  {
    id: 1,
    name: 'Adam',
  },
  {
    id: 2,
    name: 'Bailey',
  },
  {
    id: 3,
    name: 'Cathy',
  },
];

const selected = ko.observableArray([]);

selected.subscribe(console.log);

ko.applyBindings({ items, selected });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="foreach: items">
  <label>
   <input type="checkbox" data-bind="checkedValue: $data, checked: selected">
   <span data-bind="text: name"></span>
  </label> 
</div>
1
user3297291 20 listopad 2018, 13:38