4

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

我遇到的问题是我似乎无法再引用标签助手,例如“url_for”,甚至无法引用存储中的值,例如“<% $stashvalue %>”。

任何关于如何或是否可以做到这一点的想法都非常感谢。

干杯。

4

2 回答 2

5

目录中的内容public是静态服务的,最好由您的网络服务器提供,而不是由Mojolicious或 Plack 提供,因此该文件不会被 处理Mojolicious,因此<% $stashvalue %>没有任何意义。

一种解决方案是将需要访问服务器端变量的 javascript 部分嵌入到 mojo 模板中——相当丑陋,但要编写的代码更少。

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

我能想到的另一个方法是将这些 javascript 文件移动到一个由其处理的文件夹下,Mojolicious并将它们参数化 - 在html.ep需要该 js 文件的文件中,执行以下操作:

<script type="text/javascript" src="http://example.com/url/served/by/mojo/?param1=<% $stashvalue %>&param2=<% $stashvalue2 %>"></script>

并且,在响应的控制器中/url/served/by/mojo/,渲染该 js 文件,并将参数替换为查询中的参数。作为替代方案,您也可以在session

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

于 2013-03-10T16:50:19.557 回答
4

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

例如,看看这个模板如何将存储值传递给这个纯 javascript 文件的功能。

于 2013-03-10T22:34:10.310 回答