• Почему не работают как надо шаблонные строки?

    lazalu68
    @lazalu68
    Salmon
    Template strings это не шаблон который вы можете в любой момент взять и забить нужными данными, это просто инструмент с помощью которого данные распихиваются по строке. То есть у вас на 36ой строке cOA.begin создаётся именно с теми данными которые доступны на тот момент, а т.к. classPet и name не существуют в текущей области видимости, то вместо них используется undefined.

    Кстате, как по мне, так эти template strings не самый удобный механизм для обработки шаблонов, как бы ни было обманчиво их название; если пользоваться ими, то на каждый шаблон придётся иметь свою функцию. Имхо проще обрабатывать шаблоны кастомно:

    (() => {
      const re_template = /{(.*?)}/g;
    
      String.prototype.process = function(data) {
        return this.replace(re_template, (entry, word) => data[ word ]);
      }
    })();
    
    let templates = {
      greeting: 'Hello, my name is {name} and my age is {age}'
    };
    
    // Напрямую:
    templates.greeting.process({ name: 'Yeshua', age: 2019 });
    // Hello, my name is Yeshua and my age is 2019
    templates.threat.process({ reason: 'i dont like you' });
    // TypeError: Cannot read property 'process' of undefined
    
    
    // Или автоматически вызывая process с помощью Proxy:
    // (то же можно было реализовать просто с помощью дополнительной функции)
    templates = new Proxy(templates, {
        get(target, prop) {
        	if (prop in target) {
            	return String.prototype.process.bind(target[prop]);
            } else {
            	throw new Error(`String "${ prop }" was not found in storage!`);
            }
        }
    });
    
    templates.greeting({ name: 'Yeshua', age: 2019 });
    // Hello, my name is Yeshua and my age is 2019
    templates.threat({ reason: 'i dont like you' });
    // Error: String "threat" was not found in storage!
    Ответ написан
    6 комментариев
  • Как написать слайдер без прилипания курсора к ползунку?

    @forspamonly2
    вы зачем-то пытаетесь отслеживать клики на слайдер вручную, да ещё и в обработчике наведения мыши на него.

    вот у вас в этом месте обработчик выхода со слайдера сносит тот обработчик отпускания кнопки, который ставит ползунок.

    замените блок slider.onmouseenter на что-то типа
    slider.onclick = function(e){
      /* Отследить клик на слайдере*/
      if(e.target === slider){
        let thumbCoords = getCoords(thumb);
        let shiftX = e.pageX - thumbCoords.left;
        let sliderCoords = getCoords(slider);
        nLeft(e, thumbCoords, shiftX, sliderCoords,"click");
        return false;
      }
    }
    Ответ написан
    1 комментарий