我目前正在努力清理我用Mojolicious写的一个小网页应用程序。作为清理的一部分,我将我的javascript从html.ep文件中分离到公共目录中。
我遇到的问题是我似乎无法再引用标记帮助程序,例如'url_for'或甚至引用存储中的值,例如'<%$ stashvalue%>'。
非常感谢您对我如何做到这一点的任何想法。
欢呼声。
答案 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 %>¶m2=<% $stashvalue2 %>"></script>
的控制器中,渲染该js文件,并将params替换为查询中的参数。作为替代方案,您也可以在/url/served/by/mojo/
通常在Perl中,有不止一种方法可以做到。
答案 1 :(得分:4)
我通常做的是将大部分javascript封装在纯JavaScript文件中的函数调用或对象中。然后在我的模板中,我包含那些纯javascript文件,并使用我在模板中构建的api,将服务器端变量插入到函数的参数中。您可以仔细阅读Galileo的代码以查看几个示例。
例如,看看this template如何将隐藏值传递给this pure javascript file的功能。