Усы получают "это" из петли - PullRequest
0 голосов
/ 07 мая 2018

Данные

{
  "data": {
    "cats": [
      {
        "name": "Kidlat",
        "age": 1
      },
      {
        "name": "Lanaya",
        "age": 2
      },
      {
        "name": "Akasha",
        "age": 2
      }
    ]
  }
}

У меня есть <select> петля с усами, например:

{{#data.cats}}
<select id="select">
  <option value="{{this}}">{{name}} - {{age}}</option>
</select>
{{/data.cats}}

Цикл работает нормально, однако я не могу получить значение объекта для элемента.

$('#clinicSelectMap').on("change", function(e) {
  console.log(this.value); // has value
  console.log(this.value.name); // undefined
});

1 Ответ

0 голосов
/ 07 мая 2018

Вы неправильно поняли, как this работал в обратном вызове. this ссылается на сам элемент select, и вызов console.log(this.value) только что напечатал значение, которое было выбрано в раскрывающемся списке. Обратите внимание, что это не тот объект, который есть в вашей коллекции.

Фактически, вы не можете передать весь объект в шаблоне HTML, используя this. Вместо этого вам нужно присвоить name (я предполагаю, что он уникален) атрибуту value и извлечь объект, используя его в обратном вызове.

{{#data.cats}}
<select id="select">
  <option value="{{name}}">{{name}} - {{age}}</option>
</select>
{{/data.cats}}

$('#clinicSelectMap').on("change", function(e) {
  var name = this.value;
  var cat = collection.data.cats.find(item => item.name === name);
  console.log(cat);
});
...