我尝试从Marko组件访问全局变量,但我得到了Uncaught ReferenceError: out is not defined
。
class {
onClick(event) {
console.log(out.global.message)
event.preventDefault()
}
}
不应该在任何地方都可以访问out.global
/ $global
吗?
答案 0 :(得分: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
可用于非顶级组件,您必须更改呈现函数以指定它应该序列化,如the docs on server-side rendering中所示:
template.render({
$global: {
serializedGlobals: {
message: true
}
}
}, res);