• Как правильно передать параметры в функцию-обработчик чтобы потом его можно было удалить?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    На моей практике лучшим методом работой с различными EventEmitter/PubSub механизмами - это подписыватель возвращающий отписыватель. То есть некая функция, которая на основе своих аргументов организует подписку и возвращает функцию без аргументов, которая при вызове отменит подписку, отпишет от события и т.д.
    Пример из личной библиотеки:
    import {curry} from 'ramda';
    export const subscribe = curry((target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject): (() => void) => {
        target.addEventListener(eventName, handler);
        return () => target.removeEventListener(eventName, handler);
    });

    Если убрать ramda и typescript, то останется такое:
    export const subscribe = (target, eventName, handler) => {
        target.addEventListener(eventName, handler);
        return () => target.removeEventListener(eventName, handler);
    };

    Суть: subscribe при вызове подпишет DOM объект target на событие eventName с функцией handler и вернет функцию без аргументов, которая при вызове отпишет DOM объект target от события eventName для функции handler

    В Вашем случае будет так:
    const curry = (i) => (e) => changeCountry(e, i);
    const unsubscribe = subscribe(button, 'click', curry(i));
    // когда подписка больше не нужна, просто вызываем unsubscribe()
    Ответ написан
    Комментировать
  • Как изменить горячую клавишу смены языка на Ctrl+Shift в Ubuntu 18.04?

    Vladimir_Levadnij
    @Vladimir_Levadnij
    Генеральный разнорабочий Текнокомо
    Товарищи, убил вагон времени но нашёл как победить :-) Интернет полон инфы как при помощи gnome-tweak-tool включить переключение раскладки по Alt+Shift, но нам то с вами нужно именно чтобы по Alt+Shift работало переключение источников ввода, а это другой функционал, который очень удобен так как позволяет быстро переключаться между двумя последними языками, при этом там может быть портянка из 5 языков (как у меня). Решение вот тут, сразу предупрежу, чтобы не было конфликта, если вы включили Alt+Shift через gnome-tweak-tool, то отключите там.

    Суть:

    1. Установить пакет dconf-editor и отредактировать один или оба следующих ключа, чтобы заставить все работать:

    2. Перейти к org.gnome.desktop.wm.keybindings

    3. Измените источник входного сигнала переключателя на ['<Alt>Shift_L']

    4. Аналогично, ключевой переключатель-вход-источник-назад изменится на ['<Shift>Alt_L']

    Я привык нажимать кнопки в обратном порядке, поэтому у себя сделал на оборот и работает :-)
    Ответ написан
    7 комментариев
  • Что за "require is not defined" ??

    @xutesayor
    Браузеры сами по себе не понимают модули. Нужно чем-то собирать проект. Рекомендую webpack.
    Ответ написан
    Комментировать
  • Как достать значение из вложенных объектов, имея массив ключей?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const getNested = (obj, keys) => keys.reduce((p, c) => p?.hasOwnProperty(c) ? p[c] : null, obj);
    Ответ написан