Как получить доступ к `$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);