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

How does one access `$global` or `out.global` in non-top-level components in MarkoJS?

我正在尝试从 Marko 组件访问全局变量,但我得到 Uncaught ReferenceError: out is not defined

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

out.global/$global 不应该随处可见吗?

out 可用于某些生命周期方法中的组件——onCreate(input, out)onInput(input, out)onRender(out)。在其中一个中,将您想要的值分配给 this,以便在 class:

的其他地方访问它
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);