通过 widgetFile 在 Julius 中进行 Yesod 路由插值

Yesod route interpolation in Julius via widgetFile

我认为 @{SomeRouteR} 应该在 .julius 文件中工作,如以下所述:

https://www.yesodweb.com/book/shakespearean-templates#shakespearean-templates_julius_javascript

当我第一次在我的处理程序中使用它时,一切正常:

toWidget [julius|   
                        $("#examplespan").click(function(){                                                                               
                            $.ajax({                                                                                                      
                                url: @{ExampleR},                                                                                 
                                type: "POST",   
                                ...

                        |]

但现在我已经将 Handler 更改为这样工作:

$(widgetFile "example")

我在 example.julius 中添加了这段代码:

                        $("#examplespan").click(function(){                                                                               
                            $.ajax({                                                                                                      
                                url: @{ExampleR},                                                                                 
                                type: "POST",   
                                ...

我现在得到错误:

[Error#yesod-core] expected EUrl but got Nothing for: DerefIdent (Ident "ExampleR")
CallStack (from HasCallStack):
  error, called at ./Text/Shakespeare.hs:441:27 in shakespeare-2.0.20-3iMfZ8A5DXH3Twhu6IoWNc:Text.Shakespeare @(yesod-core-1.6.9-7g4SwkDmJJ261rdNBKrLzX:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:662:5)

我做错了什么?

这里可能没有任何问题。我将复制我之前为我的公司写的故障排除说明。


模板文件中的 DerefBranch 错误

I made a change in a template ({*.hamlet,*.cassius,*.lucius,*.julius}) and I get an error like this:

\"rawJS\")) (DerefBranch (DerefIdent (Ident \"tshow\")) (DerefIdent (Ident
\"errors\")))\nCallStack (from HasCallStack):\n error

这是 [我相信] 模板 Haskell 和我们编译方式的问题。也许是一些 GHC 标志,也许是 GHCi 本身,我不确定。

您可以通过触摸引用模板的文件来解决此问题,例如,如果您的模板文件是 templates/foo.julius,并且您使用 $(widgetFile "foo") 引用它] 在 Handler.Foo 模块中,然后触摸(或从您的编辑器中保存)src/Handler/Foo.hs 文件并重新加载 GHCi。