Надежный способ доступа к данным в Polymer (внутри dom-repeat / обработчика событий)
Мне нужно захватить данные из экземпляра, созданного <template is="dom-repeat">
в Polymer (v1.2.4), и я не уверен, что было бы самым безопасным способом сделать это, учитывая множество доступных теневых DOM (клиентский браузер может быть заполнен и т. д.).
Простой пример:
<template is="dom-repeat" items="[[myItems]]" id="collection">
<paper-card on-tap="handleTap">
(...)
Какой самый надежный способ получить доступ к данным модели из обработчика событий?
1.
handleTap: function(e) {
var data = e.model.get('item.myData');
}
2.
handleTap: function(e) {
var data = this.$.collection
.modelForElement(Polymer.dom(e).localTarget)
.get('item.myData');
}
Меня беспокоит то, что самый простой (#1) вариант может работать, как и ожидалось, в моей среде, но может вызывать ошибки в других браузерах.
И даже в варианте № 2 я не уверен, действительно ли необходимо нормализовать цель события (как рекомендовано в официальном руководстве Polymer по событиям) до ее передачи modelForElement
,
1 ответ
Оба должны работать; но, похоже, вы должны запустить пользовательское событие, хотя пытаетесь осмотреть дочернюю модель. Какой-либо компонент, который имеет "item.myData", должен запускать пользовательское событие при нажатии "item.myData" как часть события. Затем вы должны настроить прослушиватель для этого пользовательского события.
Смотрите пользовательские события для более подробной информации.