Javascript 如何访问MarkoJS中非顶级组件中的“$global”或“out.global”?

Javascript 如何访问MarkoJS中非顶级组件中的“$global”或“out.global”?,javascript,marko,Javascript,Marko,我试图从Marko组件访问全局变量,但得到的是未捕获引用错误:out未定义 class { onClick(event) { console.log(out.global.message) event.preventDefault() } } 不应该out.global/$global到处都可以访问吗?out可用于某些生命周期方法中的组件--onCreate(input,out),onInput(input,out),以及onRender(out

我试图从Marko组件访问全局变量,但得到的是
未捕获引用错误:out未定义

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

不应该
out.global
/
$global
到处都可以访问吗?

out
可用于某些生命周期方法中的组件--
onCreate(input,out)
onInput(input,out)
,以及
onRender(out)
。在其中一种情况下,为该分配您想要的值,以便在类中的其他位置访问该值:

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);