Как получить доступ к `$global` или`out.global` в компонентах не верхнего уровня в MarkoJS?

Я пытаюсь получить доступ к глобальным переменным из компонента Marko, но я получаю Uncaught ReferenceError: out is not defined,

class {
    onClick(event) {
        console.log(out.global.message)
        event.preventDefault()
    }
}

не должны out.global/$global быть доступным везде?

1 ответ

Решение

out делается доступным для компонентов в определенных методах жизненного цикла - onCreate(input, out), onInput(input, out), а также onRender(out), В одном из них присвойте значение, которое вы хотите this чтобы сделать его доступным в другом месте в классе:

class {
    onCreate(input, out) {
        this.message = out.global.message
    }

    onClick(event) {
        console.log(this.message)
        event.preventDefault()
    }
}

Для компонентов не верхнего уровня состояние и свойства не сериализуются автоматически, поэтому приведенный выше код вызовет this.message быть установленным в компоненте на сервере, но это свойство будет неопределенным на клиенте.

Делать out.global.message Доступный на клиенте компонентам не верхнего уровня, вы должны изменить функцию рендеринга, чтобы указать, что она должна быть сериализована, как в документах по рендерингу на стороне сервера:

template.render({
    $global: {
        serializedGlobals: {
            message: true
        }
    }
}, res);
Другие вопросы по тегам