2013-03-29 83 views
2

我試圖呈現包含鏈接的頁面,其中的href值爲"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet是一些Javascript,它將當前頁面添加爲<script>標記src="http://e.g.com/static/myFullJsFile.js"手動呈現路由的網址

我身邊有這樣幾個問題,但最主要的是令人尷尬的簡單:

給定的路線 - 例如StaticR myFullJsFile_js - 如何將路由的URL呈現爲字符串,以便我可以將它嵌入到mySmallJsSnippet?基本上,我不知道如何在我的處理程序代碼中執行Yesod的模板渲染機器自動對每個@{fooBaR}執行操作。

我懷疑它與renderRoutejoinPath有關,但我沒有正確使用joinPath。我迄今爲止的最佳猜測是從Foundation.hs導入App,並將其作爲joinPath的第一個參數 - 不行。

我會繼續尋找,但能夠有一些幫助是很好的,因爲我確定這對於有經驗的人來說是簡單的東西。

回答

7

您可以使用getUrlRenderYesod.Handler

getUrlRender :: GHandler sub master (Route master -> Text) 

在你的情況下,它看起來就像這樣:

do render <- getUrlRender 
    let renderedUrl = render $ StaticR myFullJsFile_js 

功能會使您的類型安全Route成純Text,你可以插入例如成一個腳本。 這樣,您將失去使用@{ ... }提供的正確性保證,因此只有在必要時才應該使用。

Yesod Book中也有該功能的說明。

+0

對你的第一個答案不錯不過:)我確實需要。 –

+0

我很好奇 - 你是什麼意思「你不應該玩它」? –

+0

感謝您的編輯。雖然我仍然不確定。是否不能保證我的'printf'到我的JavaScript片段中的URL是該路線的正確URL?當然這不同於說JavaScript的片段在其他方面是正確的。我明白這不能保證。 –