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

时间:2017-10-27 13:22:44

标签: javascript marko

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

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

不应该在任何地方都可以访问out.global / $global吗?

1 个答案:

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