我有一个 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}
我遇到了问题,因为我的dashboardMain
论点的 Julius 文件被加载并编译了两次。Yesod 将我的 Julius 文件的两个副本连接在一起。这在其他地方打破了局面。
我的 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)
只应用一次。改变那不是一种选择。
dashboardLayout
定义为
dashboardLayout :: String -> Widget -> Widget -> Widget
dashboardLayout sidebarHeader dashboardSidebarItems dashboardMain = $(widgetFile "layouts/dashboard")