我目前正在清理我用 Mojolicious 编写的一个小网络应用程序。作为清理工作的一部分,我将我的 javascript 从我的 html.ep 文件中分离到公共目录中。
我遇到的问题是我似乎无法再引用标签助手,例如“url_for”,甚至无法引用存储中的值,例如“<% $stashvalue %>”。
任何关于如何或是否可以做到这一点的想法都非常感谢。
干杯。
我目前正在清理我用 Mojolicious 编写的一个小网络应用程序。作为清理工作的一部分,我将我的 javascript 从我的 html.ep 文件中分离到公共目录中。
我遇到的问题是我似乎无法再引用标签助手,例如“url_for”,甚至无法引用存储中的值,例如“<% $stashvalue %>”。
任何关于如何或是否可以做到这一点的想法都非常感谢。
干杯。
目录中的内容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 %>¶m2=<% $stashvalue2 %>"></script>
并且,在响应的控制器中/url/served/by/mojo/
,渲染该 js 文件,并将参数替换为查询中的参数。作为替代方案,您也可以在session
通常在 Perl 中,有不止一种方法可以做到这一点。
我通常做的是将我的大部分 javascript 封装在纯 javascript 文件中的函数调用或对象中。然后在我的模板中包含那些纯 javascript 文件并使用我在模板中构建的这些文件中的 api,将服务器端变量插入到函数的参数中。您可以仔细阅读Galileo的代码以查看几个示例。
例如,看看这个模板如何将存储值传递给这个纯 javascript 文件的功能。