我正在研究一个自定义字段,用于在 Yesod 中选择日期时间(存储为 UTCTime)。它使用Trent Richardson 的 timepicker。我实际上已经在工作了。唯一的问题是我在处理程序中而不是在自定义字段中拥有到 javascript 文件的静态路由。当我将它移动到自定义字段时,我得到了错误。部分代码(主要从 yesod.form.fields 复制)如下:
jqueryDateTimeField :: (RenderMessage site FormMessage, YesodJquery site) => JqueryDaySettings -> Field (HandlerT site IO) UTCTime
jqueryDateTimeField jds = Field
{
fieldParse = parseHelper $ maybe (Left MsgInvalidDay) Right . readUTC . unpack
, fieldView = \theId name attrs val isReq -> do
toWidget [shamlet|
$newline never
<input id="#{theId}" name="#{name}" *{attrs} type="text" :isReq:required="" value="#{showVal val}">
|]
addScript' urlJqueryJs
addScript' urlJqueryUiJs
addScript $ StaticR js_jquery_ui_timepicker_addon_js -- Bad line here
addStylesheet' urlJqueryUiCss --error seems to occurs on the line below
toWidget [julius|
$(function(){
var i = document.getElementById("#{rawJS theId}");
$(i).datetimepicker({
dateFormat:'yy-mm-dd',
changeMonth:#{jsBool $ jdsChangeMonth jds},
changeYear:#{jsBool $ jdsChangeYear jds},
numberOfMonths:#{rawJS $ mos $ jdsNumberOfMonths jds},
yearRange:#{toJSON $ jdsYearRange jds}
});
});
|]
, fieldEnctype = UrlEncoded
}
这句话说addScript $ StaticR js_jquery_ui_timepicker_addon_js
的是导致问题的原因。我知道这一点,因为当我将该行放在调用该字段的处理程序中时,它可以工作。我收到一条错误消息说
DateTime.hs:73:13:
Could not deduce (site ~ App)
from the context (RenderMessage site FormMessage, YesodJquery site)
bound by the type signature for
jqueryDateTimeField :: (RenderMessage site FormMessage,
YesodJquery site) =>
JqueryDaySettings -> Field (HandlerT site IO) UTCTime
它继续,但困扰我的是错误似乎发生在错误的行上。第 73 行是以 . 开头的toWidget
。所以,我的问题是,如何在自定义字段中使用静态路由?如果我应该提供更多信息,请告诉我。谢谢。