2013-03-10 70 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中,有多種方法可以實現它。

相關問題