2013-03-10 74 views
4

我目前正在清理我在Mojolicious编写的一个小网站应用程序。作为清理的一部分,我将我的javascript从我的html.ep文件中分离出来。是否可以在外部JS文件中使用Mojolicious标签助手?

虽然我的问题是我似乎无法再引用标签帮助器,比如'url_for'或者甚至引用存储器中的值,如'<%$ stashvalue%>'。

任何想法如何或如果我能做到这一点非常感谢。

欢呼声。

回答

4

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

例如,请参阅this template如何将存储值传递到的功能。

5

public目录中的东西是静态服务,优化您的网络服务器,而不是由Mojolicious或普拉克,所以该文件没有得到通过Mojolicious处理,从而<% $stashvalue %>不意味着任何东西。

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

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

另外一个,我能想到的,会动的是得到由Mojolicious处理,包括它们的参数文件夹下的JavaScript文件 - 在你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中,有多种方法可以实现它。

相关问题