5

我想创建类似的东西:

<ul>
    <li>menu1
         <ul>
             <li>sub-menu1</li>
         </ul>
    </li>
    <li>menu2</li>
</ul>

所以我使用 WebSharper 编写了以下代码:

let el =
        UL [
            LI [
                Text "menu1"
                UL [
                    LI [Text "sub-menu1"]
                ]
            ]
            LI [Text "menu2"]
        ]

但它说

UL [
    LI [Text "sub-menu1"]
]

应该有 typeIPagelet但当前有 type Element

有没有人知道如何使用 WebSharper 将文本 + 其他内容放在 li 元素下?

编辑:只是说我在 stakc 上有一个错误,我不能评论或接受@Tarmil 的答案......

4

1 回答 1

8

这里的问题是同一列表中的两个元素Text "menu1"和分别具有和UL [...]类型。是 的子类型,所以这应该可以工作,但不幸的是,F# 类型推断在这种情况下存在一些困难。所以你需要通过转换来帮助它:IPageletElementElementIPageletUL [...]IPagelet

let el =
    UL [
        LI [
            Text "menu1"
            UL [
                LI [Text "sub-menu1"]
            ] :> IPagelet
        ]
        LI [Text "menu2"]
    ]

事实上,如果组合器使用 typeseq<IPagelet> -> Element而不是seq<#IPagelet> -> Element. 我们可能会在未来将它们更改为那个,但由于这将是一个重大更改,我们将其保留在下一个主要版本中。

于 2014-09-15T15:09:18.530 回答