4

我有一个 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")
4

0 回答 0