ウィジェットを 2 回ロードする Yesod ウィジェットがあります。「メイン」ウィジェットは次のようになります。
<div .container-fluid .hidden-xs>
<div .row .no-gutter>
<div .col-sm-3>
<!-- sidebar content -->
<div .col-sm-9>
<!-- the widget i'm loading twice -->
^{dashboardMain}
<nav .visible-xs>
<!-- sidebar content, also loaded twice, but this widget isn't causing problems (yet) -->
<div .container .visible-xs>
<div .row .no-gutter>
^{dashboardMain}
引数の Julius ファイルdashboardMainが 2 回読み込まれてコンパイルされるため、問題が発生しています。Yesod は、私の Julius ファイルの 2 つのコピーを連結しています。これは他の場所で物事を壊しています。
私の Haskell コードは次のようになります。
crmSidebar :: Widget
crmSidebar = defaultSidebarItems -- Using Knockout and a convention based "api"
crmApp :: Widget
crmApp = $(widgetFile "app/crm")
getCRMDashboardR :: Handler TypedContent
getCRMDashboardR = selectRep . provideRep . defaultLayout $ dashboardLayout crmSidebarItems crmApp
Haskell は正常にコンパイルされますが、前述したように、Yesod/Julius がウィジェットを処理する方法が原因で、ランタイム Javascript エラーが発生します。私は何をすべきか?
編集1:
私は KnockoutJS を使用していますが、これはko.applyBindings(viewModel)1 回だけ適用する必要があります。それを変更することはオプションではありません。
dashboardLayoutによって定義されます
dashboardLayout :: String -> Widget -> Widget -> Widget
dashboardLayout sidebarHeader dashboardSidebarItems dashboardMain = $(widgetFile "layouts/dashboard")