/ / Por que uma variável definida fora de um slot de preenchimento ou de um elemento define-macro não é visível nesse elemento? - plone, template-tal, zpt, template-metal

Por que uma variável é definida fora de um elemento de preenchimento ou de macro de definição não visível dentro desse elemento? - plone, template-tal, zpt, template-metal

Por que uma variável é definida fora de um fill-slot ou define-macro elemento não visível dentro deste elemento?

<body tal:define="a string:a">
<metal:content-core fill-slot="content-core">
<metal:content-core define-macro="content-core"
tal:define="b string:b">
<div tal:content="a" />
<div tal:content="b" />
<div tal:content="c" />
</metal:content-core>
</metal:content-core>
</body>

A expressão de contos com a variável a não pode ser avaliado. Claro b é visível.

Por outro lado, se a variável c é definido no elemento anexo de define-slot como o seguinte, então é visível.

<div tal:define="c string:c">
<metal:text define-slot="content-core"></metal:text>
</div>

Parece que as variáveis ​​são avaliadas somente após o slot ser inserido.

Respostas:

6 para resposta № 1

O contexto de uma macro TAL é significativo apenas sevocê está visualizando a macro nesse contexto. Ele é interpretado se você estiver visualizando o modelo que contém a macro, mas não se estiver usando a macro. As macros são, em certo sentido, simplesmente copiadas do tempo de execução do modelo que contém a macro para a página que a utiliza, todo o espaço para nome vem do modelo que usa a macro.

Para pensar de outra maneira: macros não são uma linguagem de escopo. Se fossem, você não seria capaz de ver a macro de outro modelo. O TAL teria que ser imensamente mais complicado, e você teria que pensar em fechamentos e funções.

Os idiomas "macro" são chamados assim porque as macros são expandidas quando usadas. Eles não são funções.

Então, por que conter modelos inclui contextopara as macros? Eles não precisam. Geralmente é feito para que a macro possa ser testada em um ambiente realista. (Embora algumas vezes as macros estejam dentro de páginas que sejam úteis independentemente.)