【问题标题】:Yesod route interpolation in Julius via widgetFile通过 widgetFile 在 Julius 中进行 Yesod 路由插值
【发布时间】:2020-03-12 03:01:30
【问题描述】:

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

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

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

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

                        |]

但现在我已经将我的处理程序更改为这样:

$(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)

我做错了什么?

【问题讨论】:

    标签: yesod yesod-julius


    【解决方案1】:

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


    来自模板文件的 DerefBranch 错误

    我对模板 ({*.hamlet,*.cassius,*.lucius,*.julius}) 进行了更改,但出现如下错误:

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

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

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

    【讨论】:

    • 嘿,杰森!谢谢你的朋友,我下次在电脑前试试这个。我记得它以一种诡异的方式来来去去,所以也许这可以解释它!
    猜你喜欢
    • 2013-10-22
    • 2015-10-29
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多