使用javascript中定义的变量TAL

使用javascript中定义的变量TAL,javascript,plone,zope,Javascript,Plone,Zope,我正在为基于plone的网站创建页面模板。我使用模板属性语言定义了一些变量: <tal:macro metal:define-macro="sample" tal:define="var python: here.getThisVar();"> 现在我想在一个externJavaScript文件中使用var,我通过单击模板内的按钮调用该文件。如何传输变量,以便在javascript文件中使用它?有多种方法。所有这些都涉及到像文本一样构造Javascript代码,然后返回结果以插

我正在为基于plone的网站创建页面模板。我使用模板属性语言定义了一些变量:

<tal:macro metal:define-macro="sample" tal:define="var python: here.getThisVar();">


现在我想在一个externJavaScript文件中使用
var
,我通过单击模板内的按钮调用该文件。如何传输变量,以便在javascript文件中使用它?

有多种方法。所有这些都涉及到像文本一样构造Javascript代码,然后返回结果以插入页面或作为Javascript注册表中的JS资源呈现


如果您想要一个健壮的示例,其中包含消息可翻译性的规定,并与JS资源注册表一起使用,请参阅Plone本身的操作方式:

在模板中,通过使用TAL将javascript变量写出来定义它,如下所示:

<script type="text/javascript" tal:content="string:var MY_VAR=${view/myVar};"></script>


现在,MY_VAR应该在外部js的范围内可用,只要您在上面一行之后调用它…

另一种方法:使用HTML5
数据
属性将变量注入HTML:

<div id="myVar" tal:attributes="data-myVar python:here.getThisVar();">

谢谢你的回答!我确信它能工作,但不幸的是,我不得不使用一个不支持HTML5的老式plone系统。但是在我的下一个项目中,我会记住这一点:)。即使在旧的Plone上,您也可以使用HTML5,唯一的区别在于您拥有的jQuery版本(可以是1.2或1.3)。将JS更改为:
jq('#myVar').attr('myVar')抱歉,无法编辑我的上一条评论。真正的代码是
jq('#myVar').attr('data-myVar')我喜欢直接来自CMFPlone的示例。我认为大家的共识是使用
tal:content
来定义和设置js变量,然后添加使用这些变量的静态js代码。我个人为这些东西创建了一个名称空间(js对象),以避免冲突:
tal:content=“string:var Plone.myVar='foo'”
$('#myVar').data('myVar');