Задать вопрос
@wakenbyWork

Как в pug пробросить функцию чтобы при вызове она имела this откуда была вызвана?

Опытным путем я выяснил что все миксины имеют свой this. Этот this содержит объект из имени миксина и функции. И это логично миксины в pug это по сути дела функции.

Я решил написать функцию которая при вызове в mixin выведет в консоль this этого mixin. Но не получается решить проблему с this. При вызове функции isMixinThis в pug mixin в консоль выводится пустой object.

const { src, dest } = require('gulp')
const pug = require('gulp-pug')
const rename = require('gulp-rename')

const dirname = path => {
  path.dirname = ''
}

const pugOptions = {
  pretty: true,
  basedir: './src',
  data: {
    isMixinThis: () => {
      return this
    }
  }
}

module.exports = function views () {
  return src('./src/views/pages/*.pug')
    .pipe(pug(pugOptions))
    .pipe(rename(dirname))
    .pipe(dest('./dist'))
}


isMixinThis - Стрелочная функция которая не имеет свой this, и как я понимаю должна брать this откуда была вызвана.

mixin header-smart()
  - console.log(isMixinThis())


Но в консоль выводится пустой объект, и я не понимаю почему((

Пробовал еще такие варианты:

const pugOptions = {
  pretty: true,
  basedir: './src',
  data: {
    isMixinThis: () => {
      return () => {
        return this
      }
    }
  }
}


mixin header-smart()
  - console.log(isMixinThis()())


Та же история. Если написать isMixinThis как обычную функцию, то она будет возвращать не понятный this. Даже если в ней сделать возврат стрелочной функции которая возвращает this((

Можно как то передать функцию в pug, чтобы при вызове она брада this из mixin в котором была вызвана?

P.S: Есть вариант который работает, но мне не нравиться:

const pugOptions = {
  pretty: true,
  basedir: './src',
  data: {
    isMixinThis: ($self) => {
      return $self
    }
  }
}


mixin header-smart()
  - console.log(isMixinThis(this))


Выводит:
{ 'header-smart': [Function: pug_interp] }

То что нужно. Но webstorm ругается на this. И каждый раз его писать не хочется. Есть ли вариант чтобы функция сама брала this миксина?
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы