- e.originalEvent.target.getAttribute('data-id')
+ e.originalEvent.target.closest('[data-id]').dataset.id
Это верстка шаблона маркера 2гис, отдельно навешивать на нее обработчики нельзя
DG.divIcon
? Да, туда нельзя. А на сам маркер - можно:const marker = DG.marker(...
marker.on('click', onMarkerClick);
function onMarkerClick(e) {
// ...
}
Я вообще сделал это чтобы как то понять на какой маркер кликнули
target
.this.markers
- это DG.featureGroup
. Оставляете общий обработчик клика, смотрите у события свойство eventTargets
, это массив, внутри будет кликнутый маркер. document.querySelectorAll('a, div, script').forEach(el => {
if (el.textContent.includes('test1'))
el.textContent = el.textContent.replace(/test1/g, 'test2');
})
const chainScripts = src =>
src.reduce((acc, n) => {
return acc.then(() => new Promise((resolve, reject) => {
const s = document.createElement('script');
s.onload = resolve;
s.onerror = reject;
s.src = n;
document.head.appendChild(s);
}));
}, Promise.resolve());
const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');
const TILE_SIDE = 32;
let pickX = 0;
let pickY = 0;
const ground = new Image();
ground.src = 'Ground.png';
const pick = new Image();
pick.src = 'Pick.png';
document.addEventListener('keydown', function(e) {
switch (e.key) {
case 'w': pickY -= TILE_SIDE; break;
case 'a': pickX -= TILE_SIDE; break;
case 's': pickY += TILE_SIDE; break;
case 'd': pickX += TILE_SIDE; break;
default: return;
}
draw();
});
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (let x = 0; x < canvas.width; x += TILE_SIDE) {
for (let y = 0; y < canvas.height; y += TILE_SIDE) {
ctx.drawImage(ground, x, y);
}
}
ctx.drawImage(pick, pickX, pickY);
}
draw();
Первое, что нужно знать — store.dispatch
может обрабатывать Promise, возвращаемый обработчиком действия, и также возвращает Promise
select *
from posts p
left join (
select post_id
from actions a
where
a.user_id = 8 and
a.action_type = 1
) a on
a.post_id = p.id
where
p.author_id = 8 or
a.post_id is not null