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
です。私の質問は、カスタム フィールドで静的ルートをどのように使用できるかということです。他に提供すべき情報がある場合はお知らせください。ありがとう。