Опытным путем я выяснил что все миксины имеют свой 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 миксина?