是否可以在外部JS文件中使用Mojolicious标记助手?

时间:2013-03-10 09:11:44

标签: javascript jquery perl mojolicious mojo

我目前正在努力清理我用Mojolicious写的一个小网页应用程序。作为清理的一部分,我将我的javascript从html.ep文件中分离到公共目录中。

我遇到的问题是我似乎无法再引用标记帮助程序,例如'url_for'或甚至引用存储中的值,例如'<%$ stashvalue%>'。

非常感谢您对我如何做到这一点的任何想法。

欢呼声。

2 个答案:

答案 0 :(得分:5)

public目录中的内容是由您的网络服务器静态提供的,而非由Mojolicious或Plack提供的,因此Mojolicious不会处理该文件,因此{{1没有任何意义。

解决方案是嵌入需要访问mojo模板中的服务器端变量的javascript部分 - 相当难看,但编写的代码较少。

另一种方法是在加载时从你的javascript文件中调用ajax,并获取服务器发送的值 - 更优雅,但需要编写更多代码。

我能想到的另一个,就是将这些javascript文件移动到<% $stashvalue %>处理的文件夹下并将其参数化 - 包含在需要该js文件的Mojolicious文件中, :

html.ep

并且,在响应<script type="text/javascript" src="http://example.com/url/served/by/mojo/?param1=<% $stashvalue %>&param2=<% $stashvalue2 %>"></script> 的控制器中,渲染该js文件,并将params替换为查询中的参数。作为替代方案,您也可以在/url/served/by/mojo/

上存储/接收这些参数

通常在Perl中,有不止一种方法可以做到。

答案 1 :(得分:4)

我通常做的是将大部分javascript封装在纯JavaScript文件中的函数调用或对象中。然后在我的模板中,我包含那些纯javascript文件,并使用我在模板中构建的api,将服务器端变量插入到函数的参数中。您可以仔细阅读Galileo的代码以查看几个示例。

例如,看看this template如何将隐藏值传递给this pure javascript file的功能。