@side-emit="(side, id) => {
this.players[id].side = side;
...
}"this, а внутри шаблона он не нужен, т.к. либо раскрывается неявно автоматически, либо, в случае со <script setup>, не используется вовсе. Следует запомнить: никакого this в шаблонах. @side-emit="(side, id) => {
players[id].side = side;
...
}"this в данном конкретном случае. Просто так совпало.@side-emit="someValue = $event ? 1 : 2", а что-то сложнее просто выносить в метод компонента\composition функцию: @side-emit="onSlideEmit". import(`../Screen/About/${currentScreen.name}.jsx`); И помните, что в бандле будет ВСЁ по маске `../Screen/About/*.jsx`. MediaRecorder, сам аудио-поток(stream) у вас всё ещё захвачен и вы можете слушать его дальше. function stopStream(stream) {
stream.getTracks().forEach(
(track) => track.readyState === 'live' && track.stop()
);
}window.dataLayer уже существует.window.dataLayer.push переопределён или window.dataLayer является реактивным (vue?) массивом и отслеживает добавления.(что суть одно)push вызывается некая функция, которая без всяких проверок на то что значение не пустое делает условно так: puhedValue.ecommerce.hasOwnProperty(...) на чём благополучно и падает.ecommerce: null, эта хрень ожидает, что ecommerce будет объектом и никак иначе.null, что тоже вариант). self.addEventListener('fetch', (event) => {
const path = event.request.url.replace(location.origin, '');
if (event.request.method === 'POST' && path === '/byFile') {
return event.respondWith(
event.request.formData().then(async (data) => {
const file = data.get('image');
let resonse = { success: false };
if (file) {
// await api call
const { name, size } = file;
resonse = { success: true, name, size };
}
return new Response(JSON.stringify(resonse));
})
);
}
});/byFile и таки делать с этими запросами что хочешь.const sum = ({data}) => data.reduce((a, b) => a + b, 0);
const colors = [
{ primary: '#AAAAAA', secondary: '#AAABBB' },
{ primary: '#BBBBBB', secondary: '#BBBCCC' },
{ primary: '#CCCCCC', secondary: '#CCCDDD' },
{ primary: '#DDDDDD', secondary: '#DDDEEE' },
]; // ЦВЕТА ВСЕГДА В НУЖНОМ ПОРЯДКЕ
const DATASETS = [
{
data: [1, 2, 3, 4, 5],
},
{
data: [2, 3, 4, 5, 6],
},
{
data: [3, 4, 5, 6, 7],
},
]; // МАССИВ МОЖЕТ БЫТЬ ОГРОМНЫМ, ДАННЫЕ ТОЖЕ
const NEW_DATASETS = DATASETS
.map((dataset, index) => [sum(dataset), index]) // получаем соответствие суммы индексу
.sort(([a],[b]) => b - a) // сортируем по сумме в обратном порядке
.map(([,sortedIndex], index) => ({
...DATASETS[index],
...colors[sortedIndex]
}));var { name, surname, age } = myUser, то это было бы реальной ошибкой: ты неявно бы менял name окна, но для const это не актуально.function setValue(element, value, options) {
if(typeof element === 'string')
element = document.querySelector(element);
options = Object.assign({
bubbles: true
}, options);
element.dispatchEvent(new MouseEvent('mousedown', options));
element.dispatchEvent(new MouseEvent('mouseup', options));
element.dispatchEvent(new MouseEvent('click', options));
element.dispatchEvent(new Event('focus', options));
element.dispatchEvent(new Event('keydown', options));
element.dispatchEvent(new Event('keypress', options));
element.value = value;
element.dispatchEvent(new Event('input', options));
element.dispatchEvent(new Event('keyup', options));
element.dispatchEvent(new Event('change', options));
setTimeout(() => element.dispatchEvent(new Event('blur', options)));
return element;
}
setValue('input[name="email"]', 'новое_значение@example.com')const uniq = (value, index, array) => !array.includes(value, index + 1);
[1, 2, 2, 3, 3, 3].filter(uniq) // [1, 2, 3] /** @type {Array<ReturnType<typeof createElement>>} */ и оно заработает. Но никаких долговременных гарантий. @mouseout или @mouseleave должны сопровождаться @focusout или @blur для доступности. @mouseover, @mouseenter или @hover должны сопровождаться @focusin или @focus для доступности. @mouseenter нам может понадобится @focusin, если нам это советует правило по доступности? Думай, думай...@focus и @focusin? {{Route('ChangeLanguage', N)}}? /en и /tr то у тебя будет открываться собственно та версия, которая сохранена в закладках\истории, а не так которая была выбрана.selectLang.selectedIndex = localStorage.getItem(storageKey); вызовет change автоматически - это не так, программная смена не вызывает событий.